program story

SQLAlchemy를 사용하여 새 데이터베이스를 만드는 방법은 무엇입니까?

inputbox 2020. 9. 9. 07:59
반응형

SQLAlchemy를 사용하여 새 데이터베이스를 만드는 방법은 무엇입니까?


SQLAlchemy를 사용하면 다음과 같이 Engine 개체가 생성됩니다.

from sqlalchemy import create_engine
engine = create_engine("postgresql://localhost/mydb")

engine인수에 지정된 데이터베이스 create_engine(이 경우 mydb)가 없으면 액세스 가 실패 합니다. 지정된 데이터베이스가없는 경우 SQLAlchemy에 새 데이터베이스를 만들도록 지시 할 수 있습니까?


postgres에서는 일반적으로 세 개의 데이터베이스가 기본적으로 존재합니다. 수퍼 유저 (예 : postgres역할)로 연결할 수있는 경우 postgres또는 template1데이터베이스에 연결할 수 있습니다 . 기본 pg_hba.conf는 이름이 지정된 유닉스 사용자 만 역할 postgres을 사용하도록 허용 postgres하므로 가장 간단한 방법은 해당 사용자가되는 것입니다. 어쨌든 데이터베이스를 만들 권한이있는 사용자로 평소와 같이 엔진을 만듭니다.

>>> engine = sqlalchemy.create_engine("postgres://postgres@/postgres")

engine.execute()그러나 postgres는 트랜잭션 내부에 데이터베이스를 만들 수 없으며 sqlalchemy는 항상 트랜잭션에서 쿼리를 실행하려고하기 때문에 사용할 수 없습니다 . 이 문제를 해결하려면 엔진에서 기본 연결을 가져옵니다.

>>> conn = engine.connect()

그러나 연결은 여전히 ​​트랜잭션 내부에 있으므로 다음을 사용하여 열린 트랜잭션을 종료해야합니다 commit.

>>> conn.execute("commit")

그런 다음 적절한 PostgreSQL 명령을 사용하여 데이터베이스 생성을 진행할 수 있습니다.

>>> conn.execute("create database test")
>>> conn.close()

SQLAlchemy-UtilsSQLAlchemy에 대한 사용자 지정 데이터 유형 및 다양한 유틸리티 함수를 제공합니다. pip를 사용하여 최신 공식 버전을 설치할 수 있습니다.

pip install sqlalchemy-utils

데이터베이스 헬퍼는 포함 create_database기능 :

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))

다음 기능 을 제공 isolation_level='AUTOCOMMIT'하여 데이터베이스를 생성하는 동안 수동 트랜잭션 관리를 피할 create_engine있습니다.

import sqlalchemy

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

또한 데이터베이스가 존재하지 않는지 확실하지 않은 경우 sqlalchemy.exc.ProgrammingError예외 를 억제하여 존재로 인한 데이터베이스 생성 오류를 무시하는 방법이 있습니다 .

import contextlib
import sqlalchemy.exc

with contextlib.suppress(sqlalchemy.exc.ProgrammingError):
    # creating database as above

참고 URL : https://stackoverflow.com/questions/6506578/how-to-create-a-new-database-using-sqlalchemy

반응형