У меня есть словарь, в который я хочу добавить все значения в базу данных sqlite. Все ключи в словаре существуют в базе данных, и все ключи имеют тип string. Тем не менее, у меня проблемы с получением значений в базу данных. Следующий код выглядит некрасиво, небезопасно и выдает ошибки всякий раз, когда встречается строка со знаком «в ней», но это вроде работает.
Query="INSERT INTO packages VALUES("
for tag in Tags:
Query=Query + '"' + Package[tag] + '", '
Query=Query[:-2]+")"
cursor.execute(Query)
Как я могу элегантно исправить это так, чтобы он был безопасным и принимал входные данные с "в строке"? Я встречал несколько других методов. Например:
fields = Package.keys()
values = Package.values()
query = "INSERT INTO packages (%s) VALUES (%%s);" % (",".join(fields))
cursor.execute(query, values)
но выдает ошибку типа.
TypeError: function takes at most 2 arguments (38 given)
Самое элегантное решение, с которым я когда-либо сталкивался, кажется
sql_insert = ('INSERT INTO packages (%s) VALUES (%s)' %
(','.join('%s' % name for name in Package),
','.join('%%(%s)s' % name for name in Package)))
cursor.execute(sql_insert, Package)
но выдает операционную ошибку, говоря
sqlite3.OperationalError: near "%": syntax error
Еще раз, мой вопрос: как мне элегантно безопасно добавить значения из словаря в базу данных?
P.S. Также стоит отметить, что я использую Python 2.5.1.