簡體   English   中英

使用 sqlalchemy 執行查詢時出現“無效對象名稱”錯誤

[英]“Invalid object name” error when executing query using sqlalchemy

我使用 pycharm 連接數據庫並使用 sqlAlchemy。 當我嘗試執行插入查詢時,它顯示以下錯誤:

Invalid object name 'pfAnalytics.optPrice'

該錯誤是由於它在我執行以下操作時將“[”和“]”添加到我的表名稱中:

ins = table.insert()

如果我檢查我看到的字符串:

str(ins) == 'INSERT INTO [pfAnalytics.optPrice] DEFAULT VALUES'

代替:

str(ins) == 'INSERT INTO pfAnalytics.optPrice DEFAULT VALUES'

我的請求是這樣的:

listToWrite = all.to_dict(orient='records')

metadata = sql.schema.MetaData(bind=engine,reflect=True)
table = sql.Table("pfAnalytics.optPrice", metadata)

Session = sessionmaker(bind=engine)
session = Session()

querydel = sql.delete("pfAnalytics.optPrice")
results = consql.execute(querydel)

consql.execute(sql.insert(table), listToWrite)

如何擺脫這些括號?

答案很棘手,這是由於 SQL 服務器上的錯誤造成的。 所以我必須指定在表名的開頭和結尾不加括號:

engine.dialect.identifier_preparer.initial_quote = ''
engine.dialect.identifier_preparer.final_quote = ''

我使用 MSSQL Server 遇到了這個問題,但似乎找不到適合我的答案。 我終於發現問題出在數據庫引擎的連接字符串中。 顯然 SQLAlchemy 需要包含在字符串中的驅動程序。 如果您使用 Flask 應用程序來獲取 URI 以及創建引擎,則情況如此。

Flask 應用程序中的一個示例:

app.config["SQLALCHEMY_DATABASE_URI"] = "mssql+pyodbc://username:\
password@server/database?driver=SQL+Server"

同樣,在創建引擎時:

db_string = "mssql+pyodbc://username:password@server/database?driver=SQL+Server"
engine = create_engine(db_string)

似乎 driver=SQL+Server 是使這項工作對我有用的關鍵。 我沒有在官方文檔中看到這一點,但在 Stack Overflow 上的另一篇文章中注意到了這一點。 因此,這要歸功於 Praveen:

使用 Flask-SQLAlchemy 連接到 MSSQL 數據庫

我從 SQLAlchemy/pyodbc 得到的確切錯誤是:

sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42S02', "[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 

希望這可以避免它為我帶來的頭痛。

就我而言,我不得不使用Database而不是Initial Catalog
比較這兩個,以獲得差異:

  • 不工作:
Server=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
  • 工作一:
Server=myServerAddress;Database=myDataBase;UID=myUsername;PWD=myPassword;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM