1

在 SQLAlchemy 中定义模型有多接近:

class Person(Base):  
    pass

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

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

4

2 回答 2

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 可能会做你想做的一切。

于 2009-07-22T12:53:21.913 回答
2

AFAIK sqlalchemy 有意将数据库元数据和类布局解耦。

您可能应该研究 Elixir ( http://elixir.ematia.de/trac/wiki):sqlalchemy的活动记录模式,但您必须定义类,而不是数据库表。

于 2009-07-22T13:00:43.430 回答