Python sqlite3 заполнитель

Есть ли способ установить заполнитель для запросов в sqlite3? У меня есть некоторые функции, которые работают с базой данных, и было бы более удовлетворительным, если бы они могли работать как с MySQL, так и с SQLite. Mysql и Postgres python apis используют%s в качестве заполнителя, но вместо этого sqlite3 использует знак вопроса.

Я ищу способ использовать один и тот же заполнитель независимо от движка базы данных.

Спасибо за вашу помощь.

2 ответа

Решение

Обновлено, чтобы исправить мою предыдущую ошибку о том, как использовать paramstyle Глобальный

Если используемые вами модули БД соответствуют спецификации API базы данных Python v2.0, вы можете получить модуль глобально paramstyle который должен быть любым из них:

  1. 'qmark' Стиль вопросительного знака, например '... WHERE name =?'
  2. 'numeric' Числовой, позиционный стиль, например, '... WHERE name =: 1'
  3. 'named' Именованный стиль, например '... WHERE name =: name'
  4. 'format' коды формата ANSI C printf, например, '... WHERE name =% s'
  5. '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 атрибут и заменить все экземпляры другого заполнителя в запросе с соответствующим значением вместо этого.

Другие вопросы по тегам