Я чувствую, что это должно быть просто, но я не могу найти ни одного примера того, как это делается.
В качестве примера у меня есть следующие существующие таблицы:
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, но действительно ненавижу способ, которым он обращается к БД, постоянно вызывая объект БД. Я проследовал за документами по отражению БД и получил это далеко:
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()
Возвращает действительно ужасный объект. Я действительно хочу, чтобы функциональность сопоставления в sqlalchemy ORM позволяла создавать объекты Event для вставки в БД.
Я посмотрел на материал sqlsoup:
from sqlalchemy.ext.sqlsoup import SqlSoup
db = SqlSoup(engine)
db.sources.all() #this kinda works out bet
Но я не мог понять, как добавить объекты из этой точки. Я даже не уверен, что это то, чего я хочу, я хотел бы иметь возможность следовать учебному пособию и материалу Declarative_base. Возможно ли это без необходимости переписывать класс для моделирования всей структуры таблицы? Если нет, может кто-нибудь показать мне, как я это сделаю в этом примере?
Может кто-нибудь указать мне правильный путь, чтобы заставить работать маппер?