这与我之前的查询有点相关..
Reading A Big File With Python
问题在于运行时,所以我被建议使用sqlite3数据库,它将时间缩短到毫秒,我很高兴,现在我唯一的问题是,连接到同一文件夹中的不同数据库文件。所有数据库文件都有相同的表。
我正在使用的代码,只读取第一个代码,并且似乎没有检查其他数据库。
输出是教师输入学生ID时,如果在数据库表中找到,则应该返回相关记录。
我的代码是这样的,但我确信我做错了什么,请原谅我,如果它是一个愚蠢的,如第一次使用sqlite3。
#other codes above not related to this part
databases = []
directory = "./Databases"
for filename in os.listdir(directory):
flname = os.path.join(directory, filename)
databases.append(flname)
for database in databases:
conn = sqlite3.connect(database)
conn.text_factory = str
cur = conn.cursor()
sqlqry = "SELECT * FROM tbl_1 WHERE std_ID='%s';" % (sudentID)
try:
c = cur.execute(sqlqry)
data = c.fetchall()
for i in data:
print "[INFO] RECORD FOUND"
print "[INFO] STUDENT ID: "+i[1]
print "[INFO] STUDENT NAME: "+i[2]
#and some other info
conn.close()
except sqlite3.Error as e:
print "[INFO] "+e
感谢任何指南
答案 0 :(得分:2)
@Whiskey,有时候尝试将问题分解为一个最小的例子,看看它是否有效或它在哪里中断是有帮助的。由于您可以看到打开时打印的数据库名称,我的猜测是查询问题,或者可能是数据库中的数据,即使记录似乎存在。当你说它找不到你正在寻找的记录时,它只是打印出来或者是否打印出异常处理程序中的“[INFO]”行?
我把以下最小的例子放在一起,就我对你的问题的理解而言,它似乎正在起作用。我向其他人添加的另一条建议是参数化您的查询,而不是直接使用原始输入来使您的应用程序更加安全。希望它有所帮助:
import os, sqlite3
"""
Create the test databases:
sqlite3 Databases/test_db1.db
sqlite> CREATE TABLE foo ( id INTEGER NOT NULL, name VARCHAR(100), PRIMARY KEY (id) );
sqlite>
sqlite3 Databases/test_db2.db
sqlite> CREATE TABLE foo ( id INTEGER NOT NULL, name VARCHAR(100), PRIMARY KEY (id) );
sqlite> INSERT INTO foo VALUES (2, 'world');
"""
databases = []
student_id = 2
directory = "./Databases"
for filename in os.listdir(directory):
flname = os.path.join(directory, filename)
databases.append(flname)
for database in databases:
try:
with sqlite3.connect(database) as conn:
conn.text_factory = str
cur = conn.cursor()
sqlqry = "SELECT * FROM foo WHERE id=:1;"
c = cur.execute(sqlqry, [student_id])
for row in c.fetchall():
print "-- found: %s=%s" % (row[0], row[1])
except sqlite3.Error, err:
print "[INFO] %s" % err