5/5 - (1票)
问题的提出和解决方案概述
本文通过使用IN命令的SQLite查询,与虚构的Finxter数据库一起工作,以检索三(3)个特定用户。
要跟上进度,请点击 这里 下载该文件并将其移至当前工作目录。
准备工作
在代码片段的顶部添加以下代码。这个代码段将使本文中的代码能够无错误地运行。
import sqlite3
注意:SQLite库内置于Python中,不需要安装,但必须被引用。
概述
Finxter 数据库文件包含25条记录的 [tuple](https://blog.finxter.com/the-ultimate-guide-to-python-tuples/)格式的记录。下面是这个文件的一个片段。
(30022145, 'Steve', 'Hamilton', 'Authority') |
users 表的结构如下。
| 数据类型 | 字段名 |
| INTEGER | 识别码 |
| 文本 | 姓氏 |
| TEXT | 姓氏 |
| TEXT | 排名 |
现在,概述已经完成,让我们连接到数据库,过滤,并输出结果。
连接到SQLite数据库
这段代码连接到一个SQLite数据库,并放在一个try/except语句中以捕捉任何可能的错误。
try:
conn = sqlite3.connect('finxter_users.db')
cur = conn.cursor()
except Exception as e:
print(f'An error occurred: {e}.')
exit()
try 语句中的代码首先执行,并尝试连接到finxter_users.db 。如果成功的话,会产生一个与下面类似的连接对象(conn )。
<sqlite3.Connection object at 0x00000194FFBC2140> |
接下来,上面创建的连接对象(conn)和cursor() 一起被用来创建一个游标对象。如果成功的话,会产生一个与下面类似的游标对象(cur)。
<sqlite3.Cursor object at 0x0000022750E5CCC0> |
注意: Cursor对象允许与数据库的具体情况进行交互,例如执行查询。
如果以上几行失败,代码会落在except ,捕捉到错误(e),并输出到终端。代码的执行就会停止。
准备好SQLite查询
在执行任何查询之前,你必须决定预期的结果以及如何实现这个结果。
try:
conn = sqlite3.connect('finxter_users.db')
cur = conn.cursor()
fid_list = [30022192, 30022450, 30022475]
fid_tuple = tuple(fid_list)
f_query = f'SELECT * FROM users WHERE FID IN {format(fid_tuple)}'
except Exception as e:
print(f'An error occurred: {e}.')
exit()
在这个例子中,三(3)行突出显示了创建、配置和保存以下变量。
**fid_list**:这包含一个list要检索的选定用户的 FID 。**fid_tuple**:这将fid_list转换为一个[tuple](https://blog.finxter.com/the-ultimate-guide-to-python-tuples/)格式。这样做是为了匹配数据库的格式(见上文)。**f_query**:这构建了一个SQLite查询,执行时返回所有匹配的记录。
查询字符串 输出
如果f_query 被输出到终端(print(`f_query`)),将显示以下内容。很完美!这正是我们想要的。
SELECT * FROM users WHERE FID IN (30022192, 30022450, 30022475) |
执行SQLite查询
让我们执行上面创建的查询并保存结果。
try:
conn = sqlite3.connect('finxter_users.db')
cur = conn.cursor()
fid_list = [30022192, 30022450, 30022475]
fid_tuple = tuple(fid_list)
f_query = f'SELECT * FROM users WHERE FID IN {format(fid_tuple)}'
results = cur.execute(f_query)
except Exception as e:
print(f'An error occurred: {e}.')
exit()
突出显示的一行是将 execute()方法附加到游标对象上,并将f_query 字符串作为参数。
如果执行成功,就会产生一个可迭代的 游标对象,类似于下面。
<sqlite3.Cursor object at 0x00000224FF987A40> |
显示查询结果
显示查询结果的标准方法是使用一个 for一个循环。
我们可以在 try/except
语句的内部/外部添加这个循环。
try:
conn = sqlite3.connect('finxter_users.db')
cur = conn.cursor()
fid_list = [30022192, 30022450, 30022475]
fid_tuple = tuple(fid_list)
f_query = f'SELECT * FROM users WHERE FID IN {format(fid_tuple)}'
results = cur.execute(f_query)
except Exception as e:
print(f'An error occurred: {e}.')
exit()
for r in results:
print(r)
conn.close()
突出显示的几行实例化了一个for循环,每次浏览一条记录的查询结果并将其输出到终端。
查询结果
(30022192, 'Amy', 'Pullister', 'Beginner') |
最后,需要关闭之前创建的连接对象。
总结
在这篇文章中,你学会了如何。
- 创建一个连接对象。
- 创建一个Cursor对象。
- 构建并执行一个SQLite查询。
- 将结果输出到终端。
我们希望你喜欢这篇文章。
编码愉快!
幽默的程序员
程序员1:我们有一个问题
程序员2:让我们使用RegEx!
程序员1
:现在我们有两个问题
......然而--当你打磨你的 "Python中的RegEx超级能力"时,你可以很容易地将这两个问题减少到零。