これは単純なはずだと思いますが、それが行われている例は1つも見つかりません。
例として、次の既存のテーブルがあります。
CREATE TABLE `source` (
`source_id` tinyint(3) unsigned NOT NULL auto_increment,
`name` varchar(40) default NULL,
PRIMARY KEY (`source_id`),
UNIQUE KEY `source_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `event` (
`source_id` tinyint(3) unsigned NOT NULL default '0',
`info` varchar(255) NOT NULL default '',
`item` varchar(100) NOT NULL default '',
PRIMARY KEY (`source_id`,`info`,`item`),
KEY `event_fkindex1` (`source_id`),
CONSTRAINT `event_fk1` FOREIGN KEY (`source_id`) REFERENCES `source` (`source_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sqlalchemy 0.6を使用して、イベントテーブルに多くの行を追加したいと思います。いくつかのsqlsoupの例を見てきましたが、dbオブジェクトを絶えず呼び出すことによってdbにアクセスする方法は本当に嫌いです。私はdbリフレクションのもののドキュメントに従い、これまでに得ました:
import sqlalchemy
from sqlalchemy import Table, Column, MetaData, create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql://user:pass@server/db', echo=True)
metadata = MetaData()
source = Table('source', metadata, autoload=True, autoload_with=engine)
Session = sessionmaker(bind=engine)
session = Session()
session.query(source).first()
これは本当に醜いオブジェクトを返します。DBに挿入するイベントオブジェクトを構築できるように、sqlalchemyORMのマッパー機能が本当に必要です。
私はsqlsoupのものを見ました:
from sqlalchemy.ext.sqlsoup import SqlSoup
db = SqlSoup(engine)
db.sources.all() #this kinda works out bet
しかし、この時点からオブジェクトを追加する方法がわかりませんでした。これが私が望むものであるかどうかさえわかりません。チュートリアルとdeclarative_baseのものに従うことができるようにしたいと思います。これは、テーブル構造全体をモデル化するためにクラスを書き直す必要なしに可能ですか?そうでない場合、誰かがこの例でこれをどのように行うかを教えてもらえますか?
誰かがマッパーのものを機能させるための正しい道を私に設定できますか?