我可以在SQLAlchemy中定义一个模型,如:
class Person(Base):
pass
只是让它动态地选择字段名称?无论如何要获得命名约定来控制表之间的关系?我想我正在寻找类似于RoR的ActiveRecord但在Python中的东西。
不确定这是否重要,但我会尝试在IronPython而不是cPython下使用它。
答案 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,但您必须定义类,而不是数据库表。