#python #sqlite #f-string
Вопрос:
У меня возникли проблемы с выбором типа текстовых данных, дополненного нулями спереди.
Обнаружил, что с моей базой данных что-то не так.
Мои многочисленные попытки и все ответы коллег должны сработать.
Спасибо @snakecharmerb и @forpas за указание на возможный недостаток в базе данных.
Например, столбец кода включает
000001, 000010, 000300 …
Существует также множество данных с одним и тем же кодом.
code date
000030 20210101
000030 20210102
000030 20210103
000030 20210104
000030 20210105
...
Мне нужно просмотреть список, поэтому я попробовал несколько способов использования f-строки, но это не сработало.
con = sqlite3.connect("DIRECTORY")
cur = con.cursor()
code = '000030' // does not work
code = 000030 // forbidden by python 3.7
query = cur.execute(f"SELECT * From TABLE where code is {code}") // should work
query = cur.execute(f"SELECT * From TABLE where code is '{code}'") // should work
query = cur.execute(f'SELECT * From TABLE where code is "{code}"') // should work
query = cur.execute('SELECT * From TABLE where code = ?',('000030',)) // should work
query = cur.execute("SELECT * From TABLE where code is 000030") // works but cannot loop through a list
Также попытался заменить «is» на»=»,»==». Все должно сработать.
Комментарии:
1. Вы , вероятно, хотите использовать
=
, а неis
:query = cur.execute('SELECT * From TABLE where code = ?',('000030',))
2. @snakecharmerb Я пробовал =, есть, == для всех… но ничего не вышло
3. Опубликуйте примерные данные таблицы.
Ответ №1:
Каким бы ни был тип данных столбца code
, этот запрос должен работать:
query = cur.execute("SELECT * From TABLE where code = ?", ("000030",))
Попробуйте использовать неявные преобразования в целые числа для значения столбца и передаваемого параметра:
query = cur.execute("SELECT * From TABLE where code 0 = ? 0", ("000030",))
Если это не сработает, это означает, что значения столбца code
не похожи на те, которые вы опубликовали в своем вопросе.
Комментарии:
1. да, с моей базой данных что-то не так, спасибо.
Ответ №2:
Вот рабочий пример:
import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute("""CREATE TABLE test (code TEXT)""")
for i in range(0, 100, 10):
cur.execute("""INSERT INTO test (code) VALUES (?)""", (str(i).zfill(5),))
conn.commit()
cur.execute("""SELECT * FROM test""")
for row in cur:
print(row)
print()
cur.execute("""SELECT code FROM test WHERE code = ?""", ('00030',))
for row in cur:
print(row)
print()
conn.close()
Выход
('00000',)
('00010',)
('00020',)
('00030',)
('00040',)
('00050',)
('00060',)
('00070',)
('00080',)
('00090',)
('00030',)