web-dev-qa-db-ja.com

sqlalchemy、存在しない場合はsqliteデータベースを作成

私はsqlalchemyを試していますが、この接続文字列を使用してデータベースに接続しています

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

Sqlalchemyは、データベースファイルをフェッチすることになっていたディレクトリにまだ存在しない場合、sqliteデータベースを作成しますか?.

23
Gandalf

はい、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)
25
Gandalf

(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)
5
danio