Python sqlite3 заполнитель
Есть ли способ установить заполнитель для запросов в sqlite3? У меня есть некоторые функции, которые работают с базой данных, и было бы более удовлетворительным, если бы они могли работать как с MySQL, так и с SQLite. Mysql и Postgres python apis используют%s в качестве заполнителя, но вместо этого sqlite3 использует знак вопроса.
Я ищу способ использовать один и тот же заполнитель независимо от движка базы данных.
Спасибо за вашу помощь.
2 ответа
Обновлено, чтобы исправить мою предыдущую ошибку о том, как использовать paramstyle
Глобальный
Если используемые вами модули БД соответствуют спецификации API базы данных Python v2.0, вы можете получить модуль глобально paramstyle
который должен быть любым из них:
- 'qmark' Стиль вопросительного знака, например '... WHERE name =?'
- 'numeric' Числовой, позиционный стиль, например, '... WHERE name =: 1'
- 'named' Именованный стиль, например '... WHERE name =: name'
- 'format' коды формата ANSI C printf, например, '... WHERE name =% s'
- 'pyformat' Коды расширенного формата Python, например, '...WHERE name=%(name)s'
Затем вы можете составить свои операторы SQL с помощью заполнителя, используемого модулем. Вы можете сделать что-то вроде этого:
import sqlite3
paramstyle = sqlite3.paramstyle
if paramstyle == 'qmark':
ph = "?"
elif paramstyle == 'format':
ph = "%s"
else:
raise Exception("Unexpected paramstyle: %s" % paramstyle)
sql = "INSERT INTO foo VALUES (%(ph)s, %(ph)s, %(ph)s)" % { "ph" : ph }
Базовая библиотека не поддерживает%s
, поэтому его нужно будет заменить вручную. Может быть проще проверить paramstyle
атрибут и заменить все экземпляры другого заполнителя в запросе с соответствующим значением вместо этого.