sqlalchemy,使用DSN指定数据库名称

时间:2017-08-02 18:40:42

标签: python sql-server sqlalchemy pyodbc

我正在尝试使用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")

2 个答案:

答案 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对象会进行任何此类缓存,因此这种方法可能没问题。