我正在尝试SQLAlchemy,并使用此连接字符串:
engine = create_engine('sqlite:///C:\\sqlitedbs\\database.db')
SQLAlchemy是否创建一个SQLite数据库,如果一个数据库不存在于一个目录中,它应该获取数据库文件?
yruzcnhs1#
是的,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)
5lhxktic2#
正如其他人所发布的那样,SQLAlchemy将自动执行此操作。我遇到了这个错误,但是,当我没有使用足够的斜线!我在应该使用四个斜杠的时候使用了SQLALCHEMY_DATABASE_URI="sqlite:///path/to/file.db":SQLALCHEMY_DATABASE_URI="sqlite:////path/to/file.db"
SQLALCHEMY_DATABASE_URI="sqlite:///path/to/file.db"
SQLALCHEMY_DATABASE_URI="sqlite:////path/to/file.db"
unftdfkk3#
Linux存储的SQLite3数据库
数据库将在与.py文件相同的文件夹中创建:
engine = create_engine('sqlite:///school.db', echo=True)
将在与.py文件相同的文件夹中示例化school.db文件。
6tqwzwtp4#
我发现(使用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)
erhoui1w5#
@Gandolf的回答很好。数据库是在您与引擎建立任何连接时创建的。这里有一个例子,除了连接到数据库之外,对数据库什么也不做,这将创建数据库。
from sqlalchemy import create_engine engine = create_engine('sqlite:///database.db') with engine.connect() as conn: pass
如果没有engine.connect()或某种形式的metadata.create_all(),将无法创建数据库。
engine.connect()
metadata.create_all()
5条答案
按热度按时间yruzcnhs1#
是的,sqlalchemy确实为您创建了一个数据库。我在Windows上使用此代码确认了它
5lhxktic2#
正如其他人所发布的那样,SQLAlchemy将自动执行此操作。我遇到了这个错误,但是,当我没有使用足够的斜线!
我在应该使用四个斜杠的时候使用了
SQLALCHEMY_DATABASE_URI="sqlite:///path/to/file.db"
:SQLALCHEMY_DATABASE_URI="sqlite:////path/to/file.db"
unftdfkk3#
Linux存储的SQLite3数据库
数据库将在与.py文件相同的文件夹中创建:
将在与.py文件相同的文件夹中示例化school.db文件。
6tqwzwtp4#
我发现(使用sqlite+pysqlite),如果目录存在,它会创建它,但如果目录不存在,它会抛出异常:
我的解决方法是这样做,尽管感觉很恶心:
erhoui1w5#
@Gandolf的回答很好。
数据库是在您与引擎建立任何连接时创建的。
这里有一个例子,除了连接到数据库之外,对数据库什么也不做,这将创建数据库。
如果没有
engine.connect()
或某种形式的metadata.create_all()
,将无法创建数据库。