@Raushka

Как вставить данные из возвращающего списка функции Python в таблицу БД?

Написана функция питона, которая возвращает список внутри которого имеются словари с кортежами
def ReadFromTabl(self, tabl):
""" Зачитывание таблицы из БД в список построчно
"""
self.tabl = tabl
colum = """ select column_name from all_tab_columns where table_name = upper('""" + self.tabl + """') """
select = """ select * from """ + self.tabl + """ """
glb_list = []
col_list = []
res_col = colum
res_sel = select
if res_col is not None and res_sel is not None:
for con in res_col:
col_list.append(con[0])
for cor in res_sel:
dict = {}
for columns,values in zip(col_list,cor):
dict[columns]=values
glb_list.append(dict)
return glb_list

Результат возврата функции питон:
[{'DOC_NUM': None, 'DOC_ORG': '0', 'GROUP_NUM': '987564', 'BOX_TYPE': '9999999 ', 'D_NUM': 'Номер города', 'BOX_NUM': '12345679', 'ADR': 'Огнева'}]

необходимо написать функцию, которая будет вставлять данные из возвращающего значения функции ReadFromTabl в определенную таблицу SQL. Ребят, прошу помогите в этой части.
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
@o5a
С cx_oracle не работал, но вижу, что там можно передавать словарь напрямую, если использовать привязку переменных, так что можно сделать таким образом:
data = [{'DOC_NUM': None, 'DOC_ORG': '0', 'GROUP_NUM': '987564', 'BOX_TYPE': '9999999 ', 'D_NUM': 'Номер города', 'BOX_NUM': '12345679', 'ADR': 'Огнева'}]

# сформировать список колонок и привязки параметров (по ":")
columns = ", ".join(data[0].keys())
bindings = ", ".join((f":{key}" for key in data[0].keys()))
sql = "insert into my_table ({}) values ({})".format(columns, bindings)
print(sql)
# должен получиться такой запрос
# insert into my_table (DOC_NUM, DOC_ORG, GROUP_NUM, BOX_TYPE, D_NUM, BOX_NUM, ADR) values (:DOC_NUM, :DOC_ORG, :GROUP_NUM, :BOX_TYPE, :D_NUM, :BOX_NUM, :ADR)

#который потом примет словарь данных напрямую (или просто execute, если нужна только одна первая строка data[0]
cur.executemany(sql, data)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы