这与我之前的查询有些关系。
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感谢您的指导
发布于 2012-08-08 02:05:15
@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" % errhttps://stackoverflow.com/questions/11850762
复制相似问题