Исключение: [IBM] [Драйвер CLI] [DB2 / LINUXX8664] SQL0104N непредвиденная ошибка токена - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть следующий фрейм данных

        CALL_DISPOSITION  CITY      END                                     INCIDENT_NUMBER 
0       ADV-Advised       Waterloo  Fri, 23 Mar 2018 01:13:27 GMT           6478983
1       AST-Assist        Waterloo  Sat, 18 Mar 2017 12:41:47 GMT           724030
2       AST-Assist        Waterloo  Sat, 18 Mar 2017 12:41:47 GMT           999000 

Я пытаюсь передать sh это в базу данных IBM DB2.

У меня есть следующий код:

# IBM DB2 imports
import ibm_db

# instantiate db2 connection
connection_id = ibm_db.connect(
            conn_string,
            '',
            '',
            conn_option,
            ibm_db.QUOTED_LITERAL_REPLACEMENT_OFF)

# create list of tuples from df
records = [tuple(row) for _, row in df.iterrows()]

# Define sql statement structure to replace data into WATERLOO_911_CALLS table
column_names = df.columns
df_sql = "VALUES({}{})".format("?," * (len(column_names) - 1), "?")
sql_command = "REPLACE INTO WATERLOO_911_CALLS {} ".format(df_sql)


# Prepare SQL statement 
try:
    sql_command = ibm_db.prepare(connection, sql_command)
except Exception as e:
     print(e)

# Execute query
try:
    ibm_db.execute_many(sql_command, tuple(temp_records))
except Exception as e:
    print('Data pushing error {}'.format(e))

Однако я продолжаю получать следующую ошибку:

Exception: [IBM][CLI Driver][DB2/LINUXX8664] SQL0104N  An unexpected token "REPLACE INTO WATERLOO_911_CALLS" was found following "BEGIN-OF-STATEMENT".  Expected tokens may include:  "<space>".  SQLSTATE=42601 SQLCODE=-104

Я не понимаю, почему это так. Я выполнил шаги, описанные в этом репо , но, похоже, не могу заставить это работать. Что я делаю неправильно? Пожалуйста, дайте мне знать, есть какие-либо разъяснения, которые я могу сделать.

1 Ответ

0 голосов
/ 28 февраля 2020

Подсказка о пропущенных пробелах, возможно, он нужен между полями в строке VALUE(). Как df_sql = "VALUES({}{})".format("?, " * (len(column_names) - 1), "?") вместо df_sql = "VALUES({}{})".format("?," * (len(column_names) - 1), "?")

Просто догадка. Я считаю, что печать sql_command перед ее выполнением также может помочь в устранении неполадок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...