SQLAlchemy:“创建架构(如果不存在)”

时间:2018-06-19 11:51:00

标签: python sql database python-3.x sqlalchemy

我想在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。

3 个答案:

答案 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上使用了它。