如何使用Python连接到多个sqlite3数据库

时间:2012-08-07 17:04:31

标签: python sqlite

这与我之前的查询有点相关..

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

感谢任何指南

1 个答案:

答案 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