запрос python sqlite выбор текста, дополненного несколькими нулями

#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',)