Использование Python dict для оператора SQL INSERT для CX_ORACLE - PullRequest
1 голос
/ 17 июня 2019

преобразование словаря в SQL-вставку для драйвера cx_Oracle в Python

custom_dictionary= {'ID':2, 'Price': '7.95', 'Type': 'Sports'}

Мне нужно сделать динамический код SQL вставки для cx_Oracle драйвера из пользовательского словаря

con = cx_Oracle.connect(connectString)
cur = con.cursor()
statement = 'insert into cx_people(ID, Price, Type) values (:2, :3, :4)'
cur.execute(statement, (2, '7.95', 'Sports'))
con.commit()

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Вы можете использовать метод pandas.read_json с итерацией по списку преобразованных значений через dataframe:

import pandas as pd
import cx_Oracle
con = cx_Oracle.connect(connectString)
cursor = con.cursor()
custom_dictionary= '[{"ID":2, "Price": 7.95, "Type": "Sports"}]'
df = pd.read_json(custom_dictionary)

statement='insert into cx_people values(:1,:2,:3)'
df_list = df.values.tolist()
n = 0
for i in df.iterrows():
    cursor.execute(statement,df_list[n])
    n += 1


con.commit()
0 голосов
/ 17 июня 2019

Если у вас есть известный набор столбцов для вставки, просто используйте insert с именованными параметрами и передайте словарь методу execute().

statement = 'insert into cx_people(ID, Price, Type) values (:ID, :Price, :Type)'

cur.execute(statement,custom_dictionary)

Если столбцы являются динамическими, создайте оператор insert, используя ключи и параметры положить его в похожий execute

cols  = ','.join( list(custom_dictionary.keys() ))
params= ','.join( ':' + str(k) for k in list(custom_dictionary.keys()))
statement = 'insert into cx_people(' + cols +' ) values (' + params + ')'
cur.execute(statement,custom_dictionary)
...