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

时间:2013-04-29 17:18:59

标签: python sql sqlite sqlalchemy

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

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

sqlalchemy是否为您创建了一个sqlite数据库(如果一个数据库不存在于它应该获取数据库文件的目录中?)。

4 个答案:

答案 0 :(得分:18)

是的,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)

答案 1 :(得分:4)

我发现(使用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)

答案 2 :(得分:3)

就像其他人一样,SQLAlchemy将自动执行此操作。但是,当我didn't use enough slashes!

时遇到此错误

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

答案 3 :(得分:2)

Linux存储的SQLite3数据库

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

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

将实例化school.db文件和.py文件所在的文件夹中。