繁体   English   中英

sqlalchemy,如果不存在则创建一个sqlite数据库

[英]sqlalchemy,creating an sqlite database if it doesn't exist

我正在尝试 sqlalchemy 并且我正在使用此连接字符串连接到我的数据库

engine = create_engine('sqlite:///C:\\sqlitedbs\\database.db')

sqlalchemy 会为您创建一个 sqlite 数据库吗?

是的,sqlalchemy 确实为您创建了一个数据库。我使用此代码在 Windows 上确认了它

from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///C:\\sqlitedbs\\school.db', echo=True)
Base = declarative_base()


class School(Base):

    __tablename__ = "woot"

    id = Column(Integer, primary_key=True)
    name = Column(String)  


    def __init__(self, name):

        self.name = name    


Base.metadata.create_all(engine)

我发现(使用 sqlite+pysqlite)如果目录存在,它会创建它,但如果目录不存在,它会抛出异常:

OperationalError: (sqlite3.OperationalError) unable to open database file

我的解决方法是这样做,虽然感觉很讨厌:

    if connection_string.startswith('sqlite'):
        db_file = re.sub("sqlite.*:///", "", connection_string)
        os.makedirs(os.path.dirname(db_file), exist_ok=True)
    self.engine = sqlalchemy.create_engine(connection_string)

正如其他人发布的那样,SQLAlchemy 将自动执行此操作。 然而,当我没有使用足够的斜杠时,我遇到了这个错误

当我应该使用四个斜杠时,我使用了SQLALCHEMY_DATABASE_URI="sqlite:///path/to/file.db"SQLALCHEMY_DATABASE_URI="sqlite:////path/to/file.db"

Linux 存储 SQLite3 数据库

数据库将在与 .py 文件相同的文件夹中创建:

engine = create_engine('sqlite:///school.db', echo=True)

将在与 .py 文件相同的文件夹中实例化 school.db 文件。

@Gandolf 的回答很好。

当您与引擎建立任何连接时,就会创建数据库。

这是一个除了连接数据库之外什么都不做的示例,这将创建数据库。

from sqlalchemy import create_engine

engine = create_engine('sqlite:///database.db')

with engine.connect() as conn:
    pass

没有engine.connect()或某种形式的metadata.create_all()数据库将不会创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM