データベースが存在するかどうかを検索するpython sqlalchemyを使用してスクリプトを作成する必要があります。sqlalchemyを使用してデータベースの存在を検索する方法
擬似コード:
if db exists cursor.execute(sql)
else
create db test;
create tables;
insert data;
データベースが存在するかどうかを検索するpython sqlalchemyを使用してスクリプトを作成する必要があります。sqlalchemyを使用してデータベースの存在を検索する方法
擬似コード:
if db exists cursor.execute(sql)
else
create db test;
create tables;
insert data;
がデータベースに接続し、SELECT 1;
のような普遍的なクエリを実行エンジンを作成します。失敗した場合は、DBを作成することができます。しかし、新しいデータベースを作成する方法はDBMSによって異なります。
PostgreSQLでは、postgres
データベースに接続し、CREATE DATABASE
文を発行して、新しく作成したデータベースに接続します。
sqlalchemy.engine.base.Engine.connect()
メソッドを使用すると、データベースが存在しない場合はOperationalError
になります。
import sqlalchemy as sqla
db = sqla.create_engine(database_uri)
try:
db.connect()
db.execute(sql)
except OperationalError:
# Switch database component of the uri
default_database_uri = os.path.join(os.path.dirname(
str(db.engine.url)), 'mysql')
db = sqla.create_engine(default_database_uri)
# Create your missing database/tables/data here
# ...
他のライブラリをインポートしても構わない場合は、sqlalchemy_utilsを使用します。その後、database_exists
は、あなたが期待することを行います。これは、sqlalchemyデータベースuriを渡すことができます。
if database_exists('sqllite:////tmp/test.db'):
do_stuff_with_db(db)
http://sqlalchemy-utils.readthedocs.org/en/latest/database_helpers.html
私は、標準的な方法が何であるかを知っているが、ここでのデータベースは、データベースのリストに照らしてチェックすることにより、存在するかどうかを確認する方法ですありません。
from sqlalchemy import create_engine
# This engine just used to query for list of databases
mysql_engine = create_engine('mysql://{0}:{1}@{2}:{3}'.format(user, pass, host, port))
# Query for existing databases
existing_databases = mysql_engine.execute("SHOW DATABASES;")
# Results are a list of single item tuples, so unpack each tuple
existing_databases = [d[0] for d in existing_databases]
# Create database if not exists
if database not in existing_databases:
mysql_engine.execute("CREATE DATABASE {0}".format(database))
print("Created database {0}".format(database))
# Go ahead and use this engine
db_engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}'.format(user, pass, host, port, db))
データベースが作成されたかどうかを知る必要がない場合は、代替方法があります。
from sqlalchemy import create_engine
# This engine just used to query for list of databases
mysql_engine = create_engine('mysql://{0}:{1}@{2}:{3}'.format(user, pass, host, port))
# Query for existing databases
mysql_engine.execute("CREATE DATABASE IF NOT EXISTS {0} ".format(database))
# Go ahead and use this engine
db_engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}'.format(user, pass, host, port, db))
私はデータベースが既に存在しているので、私が普遍的なクエリを作成すると、それらは選択され、必要なものは作成されません。私は、データベースクエリを作成していない場合は、mysqlに相当するsqlalchemyが存在することを期待していました。 – Herb21
「普遍的な」とは、すべてのSQLデータベースで動作することを意味します。使用しているバックエンドはわかりません。 'create_engine(my_target_dsn).execute( 'select 1')'はあなたの既存のプールに干渉しません。 –
私の悪い私はあなたが私はそれを考えて得るが、それは非常にプレーン簡単な私はそれが動作すると思っていないようだ。ところで、私はpythonとsqlalchemyを使っています – Herb21