sqlalchemy,用DSN指定数据库名称

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")

+1

您是否尝试过在使用普通DSN语法调用'engine_create'之后立即执行'engine.execute(“USE databasename”)? –

+0

哦,哇,这太棒了!我没有想到为此使用SQL。您是否可以将此作为“答案”而不是“评论”,以便我可以选择此作为解决方案? –

您可以直接通过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对象会执行任何此类缓存,因此此方法可能没问题。