使用sqlalchemy执行查询时出现“无效的对象名称”错误

时间:2019-03-05 13:40:55

标签: python sql sqlalchemy insert

我用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)

如何摆脱这些括号?

3 个答案:

答案 0 :(得分:0)

答案很棘手,这是SQL服务器上的错误。因此,我必须指定::p在表格名称的开头和结尾处不加括号。

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

答案 1 :(得分:0)

我使用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:

Connect to MSSQL Database using Flask-SQLAlchemy

我从SQLAlchemy / pyodbc中得到的确切错误是:

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

希望这可以减轻某人为我造成的头痛。

答案 2 :(得分:0)

就我而言,我不得不使用 Database 而不是 Initial Catalog
比较这两个,以获得差异:

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