SQLAlchemy - 模型 - 使用动态字段 - ActiveRecord

时间:2009-07-22 12:45:32

标签: python activerecord ironpython sqlalchemy

我可以在SQLAlchemy中定义一个模型,如:

class Person(Base):  
    pass

只是让它动态地选择字段名称?无论如何要获得命名约定来控制表之间的关系?我想我正在寻找类似于RoR的ActiveRecord但在Python中的东西。

不确定这是否重要,但我会尝试在IronPython而不是cPython下使用它。

2 个答案:

答案 0 :(得分:4)

自动选择字段名称非常简单:

from sqlalchemy import Table
from sqlalchemy.orm import MetaData, mapper

metadata = MetaData()
metadata.bind = engine

person_table = Table(metadata, "tablename", autoload=True)

class Person(object):
    pass

mapper(Person, person_table)

使用这种方法,您必须在mapper()的调用中定义关系,因此不能自动发现关系。

要自动将类映射到具有相同名称的表,您可以执行以下操作:

def map_class(class_):
    table = Table(metadata, class_.__name__, autoload=True)
    mapper(class_, table)

map_class(Person)
map_class(Order)

Elixir可能会做你想做的一切。

答案 1 :(得分:2)

AFAIK sqlalchemy故意将数据库元数据和类布局分离。

您可以调查Elixir(http://elixir.ematia.de/trac/wiki):sqlalchemy的Active Record Pattern,但您必须定义类,而不是数据库表。