私は SQLAlchemy に本当に慣れていませんが、とても気に入っています。現在、私は手動で多くのことを行っており、より「pythonically」かつ動的に物事を行いたいと考えています。
例として、テーブルを手動で作成/定義するこの短いスクリプトと、そのテーブルにデータを挿入する関数があります。
データベース接続
import os
from sqlalchemy import *
from sqlalchemy import schema, types
from sqlalchemy.ext.declarative import declarative_base
db_url = os.environ.get('DATABASE_URL')
engine = create_engine(db_url)
Base = declarative_base(engine)
meta = Base.metadata
テーブル定義
file_paths = Table('file_paths', meta,
Column('table_id', Integer, primary_key = True),
Column('fullpath', String(255)),
Column('filename', String(255)),
Column('extension', String(255)),
Column('created', String(255)),
Column('modified', String(255)),
Column('size', Integer),
Column('owner', String(255)),
Column('permissions', Integer),
mysql_engine='InnoDB',
)
file_paths.drop(engine, checkfirst = False)
file_paths.create(engine, checkfirst = True)
insert 関数は文字列とリストを引数として取ります
def push_to_db(fullpath, fileInfo):
i = file_paths.insert()
i.execute( fullpath = str(fullpath),
filename = str(fileInfo[0]),
extension = str(fileInfo[1]),
created = str(fileInfo[2]),
modified = str(fileInfo[3]),
size = str(fileInfo[4]),
owner = str(fileInfo[5]),
permissions = str(fileInfo[6]),
)
これは機能しますが、見栄えが悪く、オンラインのどこかで見つけたチュートリアルからそのまま引用しています。私の目標は、これらの操作を動的にすることです。
サンプルクラス
class FileMeta(object):
def __init__(self, fullPathFileName, filename):
self.fullPathFileName = fullPathFileName
self.filename = filename
self.extension = os.path.splitext(self.filename)[1].lower()
...
def fileMetaList(self):
return [self.filename, self.extension, self.created, self.modified,\
self.size, self.owner, self.permissions]
シナリオは次のとおりです。クラスオブジェクトが与えられた場合
- クラスメンバー変数に従ってテーブルを動的に定義する
- 列番号と名前は変数名に対応する必要があります
- または、クラス変数のリスト内のその変数のインデックスに対応します
- クラスから対応する動的に作成されたテーブルにデータを挿入できる関数を作成する
私の直感では、これが SQLAlchemy が適していることを示しています。このプロセスの概要を説明できる優れたチュートリアルまたはリファレンスを誰か教えてもらえますか?