Вставка данных в базу данных с помощью python / sqlite3 путем распознавания имени столбца

#python-3.x #sqlite

#python-3.x #sqlite

Вопрос:

У меня проблема, которую я не знаю, как решить, я перепробовал много решений, но всегда получаю эту операционную ошибку: near …

 def insert_medicine_to_table():
        con = sqlite3.connect('med_db3.db')
        cur = con.cursor()
        table_name = 'medicines'
        column_name = "présentation"
        value = 'Boîte de 2 seringues pré-remplies'
        cur.execute("INSERT INTO medicines {} VALUES (?)".format(column_name), value)
        con.commit()
        con.close()


sqlite3.OperationalError: near "présentation": syntax error
  

Цель здесь состоит в том, что либо скрипт, либо python должны распознать поле (имя столбца) и вставить значение в «это» поле, например, следующим образом:

 fields = ['présentation', 'princeps', 'distributeur_ou_fabriquant', 'composition', 'famille', 'code_atc', 'ppv', 'prix_hospitalier', 'remboursement', 'base_de_remboursement__ppv', 'nature_du_produit']
values = ['Boîte de 2 seringues pré-remplies', 'Oui', 'SANOFI', 'Héparine', 'Anticoagulant héparinique', 'B01AB01', '43.80', '27.40', 'Oui', '43.80', 'Médicament']
  

Это одна запись в базе данных. Проблема здесь в том, что другие записи могут иметь или не иметь одно или несколько значений для некоторого поля, а также поля не представлены в том же порядке в других записях.

Он должен распознавать каждое поле в таблице базы данных и вставлять каждое значение в правый столбец.

Ответ №1:

Проблема, вызывающая вашу ошибку, заключается в том, что ваш SQL недействителен. Оператор, который вы пытаетесь выполнить,:

 INSERT INTO medicines présentation VALUES (?)
  

Оператор, который вы хотите выполнить, это:

 INSERT INTO medicines ("présentation") VALUES (?)
  

Что касается вашего большего вопроса, если вы создадите как список столбцов ("présentation") , так и список маркеров параметров (?) и создадите запрос, используя их, вы пройдете большую часть пути.

Если поле может иметь несколько значений, предоставленных для каждой «записи» в вашей базе данных, вам может потребоваться изменить дизайн вашей базы данных, чтобы справиться с этим. Вам, по крайней мере, нужно выяснить, как вы хотите справиться с ситуацией, но это будет вопрос для другого вопроса.

Комментарии:

1. Спасибо, чувак, но я решил проблему, заархивировав списки в словарь