Sqlite хранилище данных - PullRequest
1 голос
/ 27 июня 2019

Я запускаю команду sqlite

SELECT address FROM Locations WHERE address='hola'

В таблице базы данных

table

table structure

Вывод только одна строка, хотя результат должен быть 3 строки result

Это код Python 3, который я запустил для вставки значений в БД:

st = "hola"
st1 = st.encode()
st2 =memoryview(st1)

conn = sqlite3.connect('test.sqlite')
cur = conn.cursor()

cur.execute('''
INSERT INTO Locations(address)VALUES(?)''',(st,))
cur.execute('''
INSERT INTO Locations(address)VALUES(?)''',(st1,))
cur.execute('''
INSERT INTO Locations(address)VALUES(?)''',(st2,))

conn.commit()

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Это проблема кодировки. это кодировка ISO st1 и st2 это кодировка UTF-8.

И ваш запрос в формате кодировки ISO.

0 голосов
/ 27 июня 2019

После использования вашего примера кода Python для заполнения таблицы в базе данных я запустил этот запрос:

sqlite> select *, typeof(address) from locations;
id          address     typeof(address)
----------  ----------  ---------------
1           hola        text           
2           hola        blob           
3           hola        blob           

Два значения, которые вы вставляете, сохраняются в виде BLOB-объектов, одно - в виде текстовой строки.

Из документации о том, как сравниваются значения разных типов:

Значение TEXT меньше значения BLOB.

То есть строка типа 'hola' никогда не будет равна BLOB-объекту, даже если нижележащие байты строки идентичны байтам в BLOB-объекте.Вот почему ваше SELECT.

возвращает только одно значение.
0 голосов
/ 27 июня 2019

вы путаете комментарии

""" I'm multi-line comment"""

со строками

"I'm a string"

Я предлагаю вам изменить свой код следующим образом

st = "hola"
st1 = st.encode()
st2 =memoryview(st1)

conn = sqlite3.connect('test.sqlite')
cur = conn.cursor()

cur.execute('INSERT INTO Locations(address)VALUES(?)',(st,))
cur.execute('INSERT INTO Locations(address)VALUES(?)',(st1,))
cur.execute('INSERT INTO Locations(address)VALUES(?)',(st2,))

conn.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...