मेरे पास निम्न डेटा फ्रेम है:

        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 

मैं इसे आईबीएम डीबी 2 डेटाबेस में धकेलने की कोशिश कर रहा हूं।

मेरे पास निम्न कोड है:

# 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

मुझे समझ नहीं आता कि ऐसा क्यों है। मैंने इस repo में बताए गए चरणों का पालन किया है लेकिन मुझे यह काम करने के लिए प्रतीत नहीं होता है। मैं क्या गलत कर रहा हूं? कृपया मुझे बताएं कि मैं कोई स्पष्टीकरण दे सकता हूं।

0
kryogenic1 28 फरवरी 2020, 22:54
Db2 इस अपवाद को फेंक रहा है क्योंकि Db2 में कोई कथन नहीं है REPLACE INTO (जैसे कि अन्य RDBMS द्वारा प्रस्तुत)। यदि एक सादा INSERT INTO काम करने योग्य नहीं है, तो एक अलग डिज़ाइन का उपयोग करें, उदाहरण के लिए एक अस्थायी या सत्र-तालिका में डालें, और फिर लक्ष्य तालिका में MERGE करें।
 – 
mao
29 फरवरी 2020, 12:44

1 उत्तर

यह लापता रिक्त स्थान के बारे में संकेत देता है, हो सकता है कि इसे VALUE() स्ट्रिंग में फ़ील्ड के बीच एक की आवश्यकता हो। जैसे df_sql = "VALUES({}{})".format("?, " * (len(column_names) - 1), "?") df_sql = "VALUES({}{})".format("?," * (len(column_names) - 1), "?") के बजाय

सिर्फ एक उभाड़। मुझे लगता है कि इसे क्रियान्वित करने से पहले sql_command प्रिंट करना भी समस्या निवारण में मदद कर सकता है।

0
Francozen 28 फरवरी 2020, 23:04