gpt4 book ai didi

python - 搜索数据库

转载 作者:太空宇宙 更新时间:2023-11-03 19:18:56 25 4
gpt4 key购买 nike

为了进一步研究 Python 中的数据库使用,我根据 Bryan Moyles 的优秀示例提出了以下代码:

from os   import system as cmd
from time import sleep as sleep
try:
from sqlite3 import dbapi2 as sqlite
except ImportError:
from pysqlite2 import dbapi2 as sqlite

class search_db:
def __init__(self, db, name):
self.db = db_connection
self.name = name
self.dbc = self.db.cursor()

def __getitem__(self, item):
self.dbc.execute("select * from %s limit %s, 1" % (self.name, item))
return self.dbc.fetchone()

def search():
customer_id = []
customer_ids = search_db(db_connection, "customers")
for i in range(10000):
if not "None" in str(customer_ids[i]): customer_id.append(customer_ids[i])
return customer_id

## init ##
db_name = 'customers'
db_connection = sqlite.connect('program.db')
db_curs = db_connection.cursor()

search()

当然,这没什么了不起的,而且我知道我可以进一步优化它;但正如你所看到的,我一直在努力弄清楚如何搜索数据库。我设法检索包含数据库中信息的条目,并提取条目号。我正在考虑使用 if 循环来搜索“GGS-number”条目的附加列表值,然后使用正则表达式提取行号 - 然后打印与 GGS 的客户相关的信息编号适用于。有谁知道我如何以更好的方式做到这一点?另外,我有一个 for i in range(10000),是否有更优化的形式?

最佳答案

如果这都是为了检索表“customers”的内容,那么您就错了。 SELECT 会给你一个没有间隙的表;因此,如果使用的唯一 ID 是 10 和 101,则查询结果的长度将为 2,并包含第 0 行和第 1 行中的两条现有记录。看起来您正在尝试跳过空记录,但没有任何记录.

但是你把事情搞得太复杂了;你选择了错误的榜样来效仿。您所运行的 SELECT 查询返回表中的第 n 行,该查询被包装到一个类中,该类允许您假装正在处理一个非常慢的数组。放弃它并重新开始。

如果您想要 customers 表的全部内容,请使用单个查询并使用 fetchall() 检索它们:

import sqlite3
conn = sqlite3.connect('program.db')
curs = conn.cursor()
ro = curs.execute('select * from customers')
customers = ro.fetchall()

如果您需要获取特定记录,请通过向查询添加 WHERE 子句来让数据库处理该记录。几乎总是通过 ID(或其他属性)检索记录,而不是通过它们在表中的位置。

我的建议:保持 python/sqlite 脚手架最少。建立连接、运行查询、逐一或全部获取结果。就这样。以及 curs.rowcount 来在获取结果行之前找出有多少结果行。其他一切都可以通过适当的 SQL 命令更简单、更高效地完成。因此,请阅读 SQL,而不是 Python 的库。

关于python - 搜索数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10460405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com