亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Sqlalchemy 在 USE 命令中使用模式名稱而不是數據庫名稱

Sqlalchemy 在 USE 命令中使用模式名稱而不是數據庫名稱

www說 2022-06-28 17:16:03
我正在嘗試使用 SQLAlchemy 通過網絡連接到 SQL Server 數據庫。我在使用 pyodbc 作為驅動程序時遇到了一些麻煩,因此切換到 pymssql 并最終設法使用我的用戶名“salas\guilherme.santo”創建引擎并連接到“fit_alunos”數據庫中的服務器:from sqlalchemy import create_engine, inspecteng = create_engine('mssql+pymssql://salas\guilherme.santo:pass@server/fit_alunos?charset=utf8')然后如果我檢查引擎,一切似乎都很好:insp = inspect(engine)insp.default_schema_name  # 'SALAS\\Guilherme.Santo'insp.get_schema_names()  # a list of schemas with the pattern SALAS\\'something'insp.get_table_names()  # all the tables in my schema, with no problem但是如果我嘗試創建一個MetaData對象并反映引擎:from sqlachemy import MetaDatameta = MetaData()meta.reflect(bind=eng)我得到了這個OperationalError:OperationalError: (pymssql.OperationalError) (911, b"Database 'SALAS\\Guilherme' does not exist. Make sure that the name is entered correctly.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n")[SQL: use [SALAS\Guilherme]](Background on this error at: http://sqlalche.me/e/e3q8)我猜 SQLAlchemy 正在解釋數據庫是“SALAS\Guilherme”而架構是“Santo”,而不是數據庫“fit_alunos”和架構“SALAS\Guilherme.Santo”。有沒有辦法配置數據庫和模式,以便它可以正確加載?[編輯]我用一個引擎運行了反射方法echo=True,發現它使用 SQL 函數獲取數據庫名稱:2019-10-17 16:27:16,330 INFO sqlalchemy.engine.base.Engine select db_name()2019-10-17 16:27:16,330 INFO sqlalchemy.engine.base.Engine {}2019-10-17 16:27:16,350 INFO sqlalchemy.engine.base.Engine use [SALAS\Guilherme]2019-10-17 16:27:16,350 INFO sqlalchemy.engine.base.Engine {}2019-10-17 16:27:16,389 INFO sqlalchemy.engine.base.Engine ROLLBACK---------------------------------------------------------------------------MSSQLDatabaseException                    Traceback (most recent call last)似乎SELECT db_name()返回的是模式名稱而不是數據庫名稱。然后,我測試了獲取數據庫名稱和模式名稱的 SQL 函數的返回值,似乎是對的with eng.connect() as con:      rs = con.execute("select schema_name();")      print(rs.fetchall())  # [('SALAS\\Guilherme.Santo',)]     rs = con.execute("select db_name();")      print(rs.fetchall())  # [('fit_alunos',)]
查看完整描述

2 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

它似乎是 SQLAlchemy 中的一個錯誤。我在 GitHub 上打開了一個問題,下一個版本 (1.4) 中將包含一個補丁來修復它。



查看完整回答
反對 回復 2022-06-28
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

看來您需要使用名稱并使用冒號傳遞。

pymssql
engine = create_engine('mssql+pymssql://scott:tiger@hostname:port/dbname')


查看完整回答
反對 回復 2022-06-28
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號