2017-08-02 28 views
2

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を使用するとは思わなかった。これを解決策として選ぶことができるように、これを「コメント」ではなく「答え」としてください。 –

答えて

2

あなたは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

は、私はちょうどこのような何かを試してみましたが、確立した後(別名「データベース」)我々は現在のカタログの変更について注意しなければならない一般的なルールとして

engine = create_engine("mssql+pyodbc://scott:[email protected]_dsn") 
engine.execute("USE databasename") 

正常に動作するように見えました現在のカタログを変更するためにT-SQLのUSE ...を直接呼び出すと、いくつかのテクノロジー(JDBC Connectionオブジェクトなど)によって現在のカタログが追跡され、混乱する可能性があるためです。しかし、私はpyodbcのConnectionオブジェクトがそのようなキャッシングを行うことは知らないので、この方法はおそらく大丈夫です。

関連する問題