首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用SQLAlchemy创建新的数据库?

如何使用SQLAlchemy创建新的数据库?
EN

Stack Overflow用户
提问于 2011-06-28 20:43:50
回答 5查看 101.2K关注 0票数 120

使用SQLAlchemy创建引擎对象,如下所示:

代码语言:javascript
复制
from sqlalchemy import create_engine
engine = create_engine("postgresql://localhost/mydb")

访问engine参数中指定的数据库将失败create_engine(在这种情况下,mydb)不存在。如果指定的数据库不存在,是否可以告诉SQLAlchemy创建一个新数据库?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-24 03:01:11

在 postgres 上,默认情况下通常存在三个数据库。如果您能够以超级用户身份(例如 postgres 角色)进行连接,那么您可以连接到 postgres template1 数据库。默认的 pg_hba.conf 只允许名为 postgres 的 unix 用户使用 postgres 角色,所以最简单的事情就是成为该用户。无论如何,像往常一样使用具有创建数据库权限的用户创建引擎:

代码语言:javascript
复制
>>> engine = sqlalchemy.create_engine("postgres://postgres@/postgres")

您不能使用engine.execute()但是,因为postgres不允许在事务中创建数据库,而sqlalchemy总是尝试在事务中运行查询。要解决此问题,请从引擎获取底层连接:

代码语言:javascript
复制
>>> conn = engine.connect()

但是连接仍将在事务内,因此您必须在打开的事务结束时使用commit:

代码语言:javascript
复制
>>> conn.execute("commit")

然后,您可以使用适当的PostgreSQL命令继续创建数据库。

代码语言:javascript
复制
>>> conn.execute("create database test")
>>> conn.close()
票数 113
EN

Stack Overflow用户

发布于 2015-06-22 09:45:12

SQLAlchemy-Utils为SQLAlchemy提供自定义数据类型和各种实用程序函数。您可以使用pip安装最新的官方版本:

代码语言:javascript
复制
pip install sqlalchemy-utils

Thedatabase helpers包括一个create_database功能:

代码语言:javascript
复制
from sqlalchemy import create_engine
from sqlalchemy_utils import database_exists, create_database

engine = create_engine("postgres://localhost/mydb")
if not database_exists(engine.url):
    create_database(engine.url)

print(database_exists(engine.url))
票数 142
EN

Stack Overflow用户

发布于 2015-03-01 00:55:26

可以在创建数据库时避免手动事务管理,方法是提供

isolation_level='AUTOCOMMIT'create_engine功能:

代码语言:javascript
复制
import sqlalchemy

with sqlalchemy.create_engine(
    'postgresql:///postgres',
    isolation_level='AUTOCOMMIT'
).connect() as connection:
    connection.execute('CREATE DATABASE my_database')

另外,如果您不确定数据库不存在,有一种方法可以忽略由于存在而产生的数据库创建错误,方法是取消

sqlalchemy.exc.ProgrammingError例外:

代码语言:javascript
复制
import contextlib
import sqlalchemy.exc

with contextlib.suppress(sqlalchemy.exc.ProgrammingError):
    # creating database as above
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6506578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档