Sar*_*sad 6 sqlite django python-3.x
我在测试服务器中遇到这个问题。但尚未投入生产。我尝试了一些解决方案,例如 python manage.py runserver --noreload 并编辑 /lib/python3.6/site-packages/django/utils/autoreload.py 这个文件。
文档中提到。
https://github.com/django/django/commit/5bf2c87ece216b00a55a6ec0d6c824c9edabf188
错误消息看起来像这样,
sqlite3.ProgrammingError:在线程中创建的 SQLite 对象只能在同一线程中使用。该对象是在线程 id 140000522213120 中创建的,这是线程 id 140000744696768。
请建议我一个解决方案来纠正这个问题,以前有人遇到过这个问题。帮我解决这个问题。
小智 7
这里的问题是SQLite必须处理由于多线程并发访问而产生的冲突,即一个线程创建和访问的SQLite数据库不能允许另一个线程访问它。这可能是由以下情况导致的:
始终建议使用 ORM 来处理数据库并有效管理其连接生命周期。对于 Sqlite 来说,使用最广泛的 ORM 是SqlAlchemy。使用 ORM 或许可以解决这个问题。
然而,对于非常简单的应用程序,使用 ORM 只是一种过度杀伤力,您可以通过允许并发访问来调整创建到 Sqlite 数据库的连接的方式。这可以通过在建立连接时设置check_same_thread参数来完成:False
def initDB(self, file_path):
self.file_path = file_path
self.cx = sqlite3.connect(file_path, check_same_thread=False)
self.cx.execute(self.create_table_str)
self.cx.execute(self.create_detail_table_str)
print("init the table strucutre successfully")
Run Code Online (Sandbox Code Playgroud)
话虽如此,以这种方式设置 Sqlite 连接需要负责处理应用程序而不是数据库上的并发性,并且用户应确保对数据库的写入操作是序列化的,以避免任何脏写入/更新。
注意:使用 sqlalchemy 时,使用正确的库和代码隔离很重要。我特别发现这篇文章也很有帮助。
| 归档时间: |
|
| 查看次数: |
3994 次 |
| 最近记录: |