【问题标题】:I am getting database error while triggering sql query within Python在 Python 中触发 sql 查询时出现数据库错误
【发布时间】:2020-01-23 09:46:16
【问题描述】:

我有以下用 python 编写的代码。我正在尝试执行简单的 read_sql 并且关于 sql 和连接似乎没有问题。当我在 sql server 中独立运行 SQL 时,它运行得非常好


    conn = odbc.connect ('Driver=SQL Server;'
                         'Server=xyz\CDEF;'
                         'Database =ABC;'
                         'Trusted_Connection=yes;')

    sql = """select * from PQR 
        where AS_OF_DATE = '2020-01-21' and PORTFOLIO_NAME = 'TEST'"""
    ahv = pd.read_sql(sql,conn)

错误

ProgrammingError Traceback(最近调用 最后)C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\sql.py 在 执行(自我,*args,**kwargs)1399 其他: -> 1400 cur.execute(*args) 1401 返回 cur

ProgrammingError: ('42S02', "[42S02] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]无效的对象名称“PQR”。 (208) (SQLExecDirectW)")

在处理上述异常的过程中,又发生了一个异常:

DatabaseError Traceback(最近调用 最后)在() 1 sql = """ 从 PQR 中选择 * 2 其中 AS_OF_DATE = '2020-01-21' 和 PORTFOLIO_NAME = 'TEST'""" ----> 3 ahv = pd.read_sql(sql,conn)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\sql.py 在 read_sql(sql, con, index_col, coerce_float, params, parse_dates, 列,块大小) 第379章 第380章 --> 381 块大小=块大小) 382 383尝试:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\sql.py 在 read_query(self, sql, index_col, coerce_float, params, parse_dates, 块大小)1433 1434 args = _convert_params(sql, 参数) -> 1435 cursor = self.execute(*args) 1436 columns = [col_desc[0] for col_desc in cursor.description] 1437

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\sql.py 在 执行(自我,*args,**kwargs)1410 ex = DatabaseError( 1411 “在 sql '%s' 上执行失败:%s” % (args[0], 除外)) -> 1412 raise_with_traceback(ex) 1413 1414 @staticmethod

C:\ProgramData\Anaconda3\lib\site-packages\pandas\compat__init__.py 在 raise_with_traceback(exc, traceback) 401 如果回溯 == 省略号: 第402章 --> 403 提高 exc.with_traceback(traceback) 404 其他: 405 # 这个版本的 raise 在 Python 3 中是一个语法错误

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\sql.py 在 执行(自我,*args,**kwargs)1398
cur.execute(*args, **kwargs) 1399 其他: -> 1400 cur.execute(*args) 1401 返回 cur 1402 例外为 exc:

DatabaseError: sql 'select * from PQR 执行失败 其中 AS_OF_DATE = '2020-01-21' 和 PORTFOLIO_NAME = 'TEST'': ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL 服务器]无效的对象名称“PQR”。 (208) (SQLExecDirectW)")

【问题讨论】:

  • 正确的代码通常不会因错误而失败
  • 发布完整的错误信息。
  • 编辑了正文。
  • 如果你使用sql = "select db_name() as dbn"会得到什么?
  • 提示:“无效的对象名称”通常意味着您没有指向您认为的数据库(目录)。

标签: python sql sql-server pyodbc


【解决方案1】:
conn = pyodbc.connect('Driver={SQL Server}; Server=localhost;uid=yourusername; pwd=yourpassword; Database = yourdatabase; Trusted_Connection=No;')

我猜你在 pyodbc 而不是 odbc 中犯了一个错误。 并尝试在花括号 {} 和 Trusted_Connection 中写入驱动程序对象为否

【讨论】:

  • 运气不好,伙计。我的查询连接位成功,我正在使用'import pyodbc as odbc'
  • 尝试在数据库名和表名之间使用双点(.)作为 RISK..VW_ALL_HOLDINGS
  • 这没有帮助
猜你喜欢
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 2015-09-12
相关资源
最近更新 更多