sqlalchemy,用DSN指定数据库名称
问题描述:
我正在尝试使用sqlalchemy
从Linux连接到SQL Server。 This page显示如下的基于DSN的连接。sqlalchemy,用DSN指定数据库名称
engine = create_engine("mssql+pyodbc://scott:[email protected]_dsn")
是否有指定使用DSN数据库名称的方式?我知道我们可以在odbc.ini
或SQL查询中指定一个数据库名称,但是我想知道我们是否也可以这样做。
engine = create_engine("mssql+pyodbc://scott:[email protected]_dsn/databasename")
答
您可以直接通过connect_args参数create_engine参数传递给pyodbc.connect方法:
def my_create_engine(mydsn, mydatabase, **kwargs):
connection_string = 'mssql+pyodbc://@%s' % mydsn
cargs = {'database': mydatabase}
cargs.update(**kwargs)
e = sqla.create_engine(connection_string, connect_args=cargs)
return e
这也将使数据库通过多个事务/会话持久化。
答
我只是想这样的事情,它建立后似乎正常工作
engine = create_engine("mssql+pyodbc://scott:[email protected]_dsn")
engine.execute("USE databasename")
一般来说,我们应该小心改变当前目录(又名“数据库”)因为一些技术(例如,JDBC Connection
对象)跟踪当前目录,并且如果我们直接在T-SQL中调用USE ...
来更改当前目录,可能会感到困惑。但是,我并不知道pyodbc的Connection
对象会执行任何此类缓存,因此此方法可能没问题。
您是否尝试过在使用普通DSN语法调用'engine_create'之后立即执行'engine.execute(“USE databasename”)? –
哦,哇,这太棒了!我没有想到为此使用SQL。您是否可以将此作为“答案”而不是“评论”,以便我可以选择此作为解决方案? –