[英]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.