Jan*_*isl 6 python sql database sqlalchemy python-3.x
我想在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
Run Code Online (Sandbox Code Playgroud)
我正在使用Python 3.5。
sta*_*ust 22
我有同样的问题,我找到的答案是:
if not engine.dialect.has_schema(engine, schema_name):
engine.execute(sqlalchemy.schema.CreateSchema(schema_name))
Run Code Online (Sandbox Code Playgroud)
我们也可以在没有引擎实例的情况下检查模式,但使用连接
conn = engine.connect()
if conn.dialect.has_schema(conn, schema_name):
...
Run Code Online (Sandbox Code Playgroud)
对于 MS Sql 用户,没有,has_schema()但这似乎有效:
if schemaname not in conn.dialect.get_schema_names(conn):
conn.execute(schema.CreateSchema(schemaname))
Run Code Online (Sandbox Code Playgroud)
小智 7
从 SQLAlchemy 2.0 版开始,该类就有了可用的if_not_exists参数CreateSchema。
from sqlalchemy import create_engine
from sqlalchemy.schema import CreateSchema
connectable = create_engine("postgresql+psycopg2://postgres@localhost/postgres")
with connectable.connect() as connection:
connection.execute(CreateSchema("new_schema", if_not_exists=True))
connection.commit()
Run Code Online (Sandbox Code Playgroud)
此外,还有可用的对象has_schema方法Inspector(使用方法创建inspect),可以用作数据库元数据的方言不可知接口来检查模式的存在。也许您会发现它在某些情况下很有用。
from sqlalchemy import create_engine, inspect
from sqlalchemy.schema import CreateSchema
schema = "new_schema"
connectable = create_engine("postgresql+psycopg2://postgres@localhost/postgres")
with connectable.connect() as connection:
if not inspect(connection).has_schema(schema):
connection.execute(CreateSchema(schema))
connection.commit()
Run Code Online (Sandbox Code Playgroud)