Python Sqlite3 : Create a schema without having to use a second database

标签 python database sqlite

我想在 python 中为 sqlite3 数据库创建一个模式,但 sqlite 似乎不支持 CREATE SCHEMA ( sqlite docs )。我查看了 ATTACH,它似乎可以通过使用第二个数据库来完成这项工作,但我只需要一个具有模式的数据库。

我想按照这些思路做一些事情:

import sqlite3
db = sqlite3.connect('db_file.db')
db.execute("CREATE TABLE my_schema.my_table(column TYPE);")
db.commit()

但是,它抛出一个异常:

Traceback (most recent call last):
  File "C:/Users/Mod/Projects/sandbox/test_db.py", line 8, in <module>
    db.execute("CREATE TABLE my_schema.my_table(column TYPE);")
OperationalError: unknown database my_schema

我知道我可以像这样使用 ATTACH...

import sqlite3
db = sqlite3.connect('db_file.db')
db.execute("ATTACH DATABASE 'db_file_2.db' AS 'my_schema';")
db.execute("CREATE TABLE my_schema.my_table(column TYPE);")
db.commit()

...但是有什么方法可以在没有第二个数据库的情况下创建模式吗?

最佳答案

在我们的项目中,我们使用 Postgresql 作为生产数据库,每个服务都有单独的模式。 我想使用 Sqlite3 进行单元测试。所以我需要一种方法来创建模式。

accepted answer帮助我找出解决方案。 我用 SQLAlchemy在我的项目中(在 Flask 中与 Flask-SQLAlchemy 一起)。

我想在这里分享我是如何做到的,希望它能对某人有所帮助。

假设我正在使用内存数据库,我想使用的模式是 我的模式。命令如下所示:

from sqlalchemy import create_engine

eng = create_engine("sqlite://")
conn = eng.connect()
conn.execute("attach ':memory:' as my_schema")

您可以在 SQLAlchemy 中找到有关 SQLite 使用的更多信息:http://docs.sqlalchemy.org/en/latest/dialects/sqlite.html

如果您使用的是 Flask-SQLAlchemy,您可以通过以下方式执行与上述示例相同的操作:

from flask_sqlalchemy import SQLAlchemy

SQLALCHEMY_DATABASE_URI = 'sqlite://'

db = SQLAlchemy()
# Create Flask app object, attach it to db object, and then do:
with app.app_context():
    with db.engine.connect() as con:
        con.execute("attach ':memory:' as svc_kpi")

关于Python Sqlite3 : Create a schema without having to use a second database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30897377/

相关文章:

ruby-on-rails - 在现有的 Rails 应用程序上从 Sqlite3 切换到 PostgreSQL

c# - 我可以密码加密 SQLite 数据库吗?

python - 如何修复 Graphite 中的守护进程导入错误?

python - 使用 Python 示例对多项式朴素贝叶斯分类器进行分类

python - 文字游戏问题

php - 只喜欢一次帖子/评论,laravel

android - 如何访问 Android 模拟器数据库的内容?

python - 是否可以用 True 初始化 bool?

php - Joomla 3 : manually updating a table in the database

php - 将多个文件名 (img_path) 保存在一行中,以逗号或 | 分隔