【发布时间】: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