我想在SQLAlchemy中执行“如果不存在则创建模式”查询。 有没有比这更好的方法了?
engine = sqlalchemy.create_engine(connstr)
schema_name = config.get_config_value('db', 'schema_name')
#Create schema; if it already exists, skip this
try:
engine.execute(CreateSchema(schema_name))
except sqlalchemy.exc.ProgrammingError:
pass
我正在使用Python 3.5。
答案 0 :(得分:3)
对于MS Sql用户,没有has_schema()
,但这似乎可行:
if schemaname not in conn.dialect.get_schema_names(conn):
conn.execute(schema.CreateSchema(schemaname))
答案 1 :(得分:2)
我有相同的问题,发现的答案是:
if not engine.dialect.has_schema(engine, schema_name):
engine.execute(sqlalchemy.schema.CreateSchema(schema_name))
我们还可以在不使用引擎实例但使用连接的情况下检查架构
conn = engine.connect()
if conn.dialect.has_schema(conn, schema_name):
答案 2 :(得分:1)
您可以使用出色的sqlalchemy_utils
软件包以一种非常简洁的方式来做到这一点。
首先,安装软件包:
pip install sqlalchemy_utils
然后像这样使用它:
from sqlalchemy_utils.functions import database_exists, create_database
engin_uri = 'postgres://postgres@localhost/name'
if not database_exists(engin_uri):
create_database(engin_uri)
官方文档中的示例使用了PostgreSQL,而我个人在MySQL 8上使用了它。