首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python连接多个sqlite3数据库

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

Stack Overflow用户
提问于 2012-08-08 01:04:31
回答 1查看 7.9K关注 0票数 3

这与我之前的查询有些关系。

Reading A Big File With Python

问题出在运行时,所以我被建议使用sqlite3数据库,它将时间减少到毫秒,我非常高兴,现在我唯一的问题是连接到同一文件夹中的不同数据库文件。所有数据库文件都有相同的表。

我使用的代码只读取第一个数据库,似乎不检查其他数据库。

输出是当老师输入学生ID时,如果在数据库表中找到了相关记录,就应该返回相关记录。

我的代码是这样的,但我确信我做错了什么,如果这是一个愚蠢的错误,请原谅我,因为我是第一次使用sqlite3。

代码语言:javascript
运行
复制
#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

感谢您的指导

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-08 02:05:15

@Whiskey,有时试着把问题分解成一个最小的例子,看看是否有效,或者它在哪里崩溃,这是有帮助的。由于您可以在打开时看到打印的数据库名称,因此我猜测可能是查询或数据库中的数据出现了问题,尽管记录似乎在那里。当你说它找不到你要找的记录时,它是什么也不打印出来,还是在你的异常处理程序中打印出"INFO“行?

我把下面这个最小的例子放在一起,就我对你的问题的理解而言,它似乎是有效的。我唯一的另外一个建议是将你的查询参数化,而不是直接使用原始输入,以使你的应用程序更安全。希望它能有所帮助:

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11850762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档