Я пытаюсь вставить словарь в таблицу Oracle и его отказ от ошибки несоответствия данных. Я хочу знать, является ли синтаксис, который я использую, правильным.python oracle insert datatype mismatch
In [19]:selrow
Out[19]:[{'CUSTOMER_NM': 'ABC INC',
'CUSTOMER_NO': 'A0050129',
'CUSTOMER_SK': 926,
'EFFECTIVE_DT': datetime.datetime(2015, 10, 2, 0, 0)}]
Вот моя вставка заявление:
In [30]:cur=db.cursor()
cur.execute('INSERT INTO DIM_CUST (%s) VALUES (%s)', (selrow[0].keys(), selrow[0].values()))
db.commit()
, и я получаю следующее сообщение об ошибке:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-30-eefac6fb0aa7> in <module>()
2 #query = 'INSERT INTO DIM_CUST (%s) VALUES (%s)', (selrow[0].keys(), selrow[0].values())
3 #rint query
----> 4 cur.execute('INSERT INTO DIM_CUST (%s) VALUES (%s)', (selrow[0].keys(), selrow[0].values()))
5 db.commit()
TypeError: expecting numeric data
Является ли мой синтаксис вставки правильно? Я использую словарные ключи как имена столбцов и словарные значения как значения, которые нужно ввести в таблицу.
pl. спросите любые детали, которые я, возможно, пропустил. Спасибо за любую помощь, которую вы можете предоставить.
Невозможно проверить это прямо сейчас, так что просто комментарий вместо ответа: что-то в строках 'cur.execute ('INSERT INTO DIM_CUST (CUSTOMER_NO, CUSTOMER_NM, CUSTOMER_SK, EFFECTIVE_DT) VALUES (: CUSTOMER_NO,: CUSTOMER_NM,: CUSTOMER_SK,: EFFECTIVE_DT) ', selrow [0]) 'должен работать. См. Документы ['paramstyle'] (https://www.python.org/dev/peps/pep-0249/#paramstyle) для вашего адаптера DBAPI Oracle для поддерживаемых стилей параметров. –
Спасибо, Лукас, работал как шарм. Я переписал его, чтобы сделать его несколько общим. См. Ниже мой ответ. Еще раз спасибо. –