我正在尝试 sqlalchemy,我正在使用此连接字符串连接到我的数据库
engine = create_engine('sqlite:///C:\\sqlitedbs\\database.db')
sqlalchemy 是否会为您创建一个 sqlite 数据库,如果它尚未出现在它应该获取数据库文件的目录中?
我正在尝试 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)
正如其他人发布的那样,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 文件。
我发现(使用 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)