繁体   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