我正在尝试使用sqlalchemy
从Linux连接到SQL Server。 This page显示基于DSN的连接,如下所示。
engine = create_engine("mssql+pyodbc://scott:tiger@some_dsn")
有没有办法使用DSN指定数据库名称?我知道我们可以在odbc.ini
或SQL查询中指定数据库名称,但我想知道我们是否也可以这样做。
engine = create_engine("mssql+pyodbc://scott:tiger@some_dsn/databasename")
答案 0 :(得分:3)
您可以通过create_engine中的connect_args参数将参数直接传递给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
这也可以使数据库通过多个事务/会话保持不变。
答案 1 :(得分:2)
我刚试过这样的事情,似乎工作正常
engine = create_engine("mssql+pyodbc://scott:tiger@some_dsn")
engine.execute("USE databasename")
作为一般规则,我们应该在建立连接后更改当前目录(也称为"数据库"),因为某些技术(例如,JDBC Connection
对象)会跟踪当前目录,如果我们直接在T-SQL中调用USE ...
来更改当前目录,可能会感到困惑。但是,我不知道pyodbc的Connection
对象会进行任何此类缓存,因此这种方法可能没问题。