【问题标题】:“Invalid object name” error when executing query using sqlalchemy使用 sqlalchemy 执行查询时出现“无效的对象名称”错误
【发布时间】:2019-07-27 00:06:16
【问题描述】:

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

如何去掉这些括号?

【问题讨论】:

    标签: python sql sqlalchemy insert


    【解决方案1】:

    答案很棘手,这是由于 SQL 服务器上的错误。所以我必须指定在表格名称的开头和结尾不放括号:

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

    【讨论】:

      【解决方案2】:

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

      希望这可以避免它为我带来的头痛。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2010-10-26
          • 1970-01-01
          • 1970-01-01
          • 2011-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多