首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python 3的数据库?

python 3的数据库?
EN

Stack Overflow用户
提问于 2009-10-10 08:09:24
回答 6查看 3.6K关注 0票数 3

我正在编写一小块服务器软件,供几个用户个人使用。不是几百人,也不是数千人,但一次可能是3-10人。

因为它是一个线程服务器,所以SQLite无法工作。它抱怨这样的线程:

ProgrammingError:线程中创建的SQLite对象只能在线程id 140735085562848中创建的同一个thread.The对象中使用,这是线程id 4301299712。

此外,他们还说SQLite对并发性并不是很好。

现在,由于我开始使用Python3(并且更愿意继续使用它),我似乎无法让MySQL模块正常工作,其他模块似乎也同样沮丧。

在这种情况下,我还可以考虑Python 3的其他DB选项吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-10 10:20:12

首先请注意,sqlite是线程安全的

代码语言:javascript
运行
复制
$ python
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite
>>> sqlite.threadsafety
1

然后确保在每个线程中打开数据库的一个新句柄。

我使用线程本地存储来缓存数据库句柄,因此每个线程只有一个。就像这样..。(来自py2.5prog-希望它能与3.0一起工作!)

代码语言:javascript
运行
复制
import threading

class YourClass:
    def __init__(self):
        #...
        self.local = threading.local()  # Thread local storage for db handles
        self.db_file = "/path/to/db"
        #...
    def db_open(self):
        if not getattr(self.local, "db", None):
            self.local.db = sqlite3.connect(self.db_file)
        return self.local.db
票数 7
EN

Stack Overflow用户

发布于 2009-10-10 08:11:53

我对Python3做了一个端口 of psycopg2。

票数 1
EN

Stack Overflow用户

发布于 2009-10-11 14:49:14

我知道有一些用于火鸟的Python,但我不知道Python3中是否存在一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1547365

复制
相关文章

相似问题

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