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

前端 未结 4 967
日久生厌
日久生厌 2021-02-01 04:05

I am trying out sqlalchemy and i am using this connection string to connect to my databases

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


        
相关标签:
4条回答
  • 2021-02-01 04:25

    I found (using sqlite+pysqlite) that if the directory exists, it will create it, but if the directory does not exist it throws an exception:

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

    My workaround is to do this, although it feels nasty:

        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)
    
    0 讨论(0)
  • 2021-02-01 04:26

    Yes,sqlalchemy does create a database for you.I confirmed it on windows using this code

    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)
    
    0 讨论(0)
  • 2021-02-01 04:27

    As others have posted, SQLAlchemy will do this automatically. I encountered this error, however, when I didn't use enough slashes!

    I used SQLALCHEMY_DATABASE_URI="sqlite:///path/to/file.db" when I should have used four slashes: SQLALCHEMY_DATABASE_URI="sqlite:////path/to/file.db"

    0 讨论(0)
  • 2021-02-01 04:29

    Linux stored SQLite3 database

    database will be create in the same folder as the .py file:

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

    will instantiate the school.db file in the same folder as the .py file.

    0 讨论(0)
提交回复
热议问题