Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Sqlite数据存储_Python 3.x_Sqlite_Binary - Fatal编程技术网

Python 3.x Sqlite数据存储

Python 3.x Sqlite数据存储,python-3.x,sqlite,binary,Python 3.x,Sqlite,Binary,我正在运行sqlite命令 SELECT address FROM Locations WHERE address='hola' 在数据库表上 输出仅为一行,即使结果应为3行 这是我在数据库中插入值时运行的Python 3代码: st = "hola" st1 = st.encode() st2 =memoryview(st1) conn = sqlite3.connect('test.sqlite') cur = conn.cursor() cur.execute(''' INSE

我正在运行sqlite命令

SELECT address FROM Locations WHERE address='hola'
在数据库表上

输出仅为一行,即使结果应为3行

这是我在数据库中插入值时运行的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()
这是一个字符集问题。 它是ISO字符集 st1和st2是UTF-8字符集


并且您的查询是ISO字符集格式。

您的评论令人困惑

""" 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()

使用示例python代码填充数据库中的表后,我运行了以下查询:

sqlite> select *, typeof(address) from locations;
id          address     typeof(address)
----------  ----------  ---------------
1           hola        text           
2           hola        blob           
3           hola        blob           
插入的两个值存储为blob,一个为文本字符串

关于如何比较不同类型的值:

文本值小于BLOB值


也就是说,像
'hola'
这样的字符串永远不会等于blob,即使字符串的底层字节与blob中的字节相同。这就是为什么您的
SELECT

只返回一个值的原因。该值与我的python代码一起正确地输入到DB表中。问题是sqlite命令仅将第1行显示为output
SELECT*,typeof(address)FROM Locations
为您提供了什么<代码>文本对于所有三个,或者其中两个是
blob
?文本、blob、blob有一种选择blob字段的方法。此外,当blob为空时,为什么文本字段没有给出错误entered@JohnFrancisSqlite使用动态类型;将blob存储在具有不同亲和力的列中是完全正确的。是理解sqlite如何工作的必读读物。(和
SELECT*FROM-Locations,其中address=X'686F6C61'
是一种使用blob文本的方法。但更好的方法是首先不要将字符串存储为blob,而是存储为文本值)