Я получаю ошибку базы данных при запуске запроса sql в Python - PullRequest
0 голосов
/ 23 января 2020

У меня есть следующий код, написанный на python. Я пытаюсь выполнить простое read_ sql, и, похоже, нет проблем с sql и соединением. SQL прекрасно работает, когда я независимо запускаю его на 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 в execute (self, * args, ** kwargs) 1399 else: -> 1400 cur.execute (* args) 1401 return cur

ProgrammingError: ('42S02', "[42S02] [Microsoft] [ODB C SQL Драйвер сервера] [SQL Сервер] Неверное имя объекта 'PQR'. (208) (SQLExecDirectW)")

Во время обработки вышеупомянутого исключения произошло другое исключение:

DatabaseError Traceback (последний последний вызов) в () 1 sql = "" "select * from 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, column, chunksize) 379 sql, index_col = index_col, params = params, 38 0 coerce_float = coerce_float, parse_dates = parse_dates, -> 381 chunksize = chunksize) 382 383 try:

C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ sql. py в read_query (self, sql, index_col, coerce_float, params, parse_dates, chunksize) 1433 1434 args = _convert_params (sql, params) -> 1435 курсор = self.execute (* аргументы) 1436 столбцов = [col_desc [ 0] для col_des c в cursor.description] 1437

C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ sql .py в execute (self, * args , ** kwargs) 1410 ex = DatabaseError (1411 «Ошибка выполнения на sql '% s':% s"% (args [0], ex c)) -> 1412 повышение_with_traceback (ex) 1413 1414 @staticmethod

C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ compat__init __. Py в подъеме_with_traceback (ex c, трассировка) 401, если traceback == Ellipsis: 402 _, _, traceback = sys.exc_info () -> 403 повышение, например, c .with_traceback (traceback) 404 иначе: 405 # эта версия повышения представляет собой синтаксическую ошибку в Python 3 * 10 21 *

C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ sql .py в execute (self, * args, ** kwargs) 1398
cur.execute (* args, ** kwargs) 1399 else: -> 1400 cur.execute (* args) 1401 return cur 1402 за исключением исключения как ex c:

DatabaseError: Ошибка выполнения при sql 'select * from PQR где AS_OF_DATE = '2020-01-21' и PORTFOLIO_NAME = 'TEST' ': (' 42S02 ', "[42S02] [Microsoft] [ODB C SQL Драйвер сервера] [SQL Server] Неверное имя объекта' PQR ». (208) (SQLExecDirectW) ")

1 Ответ

0 голосов
/ 23 января 2020
conn = pyodbc.connect('Driver={SQL Server}; Server=localhost;uid=yourusername; pwd=yourpassword; Database = yourdatabase; Trusted_Connection=No;')

Полагаю, вы делаете ошибку в pyodb c, а не odb c. и попробуйте написать объект драйвера в фигурных скобках {} и Trusted_Connection как No

...