繁体   English   中英

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

[英]SQLAlchemy - Models - using dynamic fields - ActiveRecord

我在SQLAlchemy中定义模型的距离有多近:

class Person(Base):  
    pass

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

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

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

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)

长生不老药可能会做您想要的一切。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM