有办法从模型类中提取python sqlalchemy映射吗?到目前为止,我一直在使用声明式映射,其中类将扩展声明性基。但是现在我想在生成的python模块中映射一些模型。所以我不能修改模型类。
你好,小屁孩
发布于 2013-09-11 17:38:12
这里有一个示例,如何手工为基于xml的orm类创建您自己的解决方案。它从本教程读取User.hbm.xml文件。这是黑客-我对Hibernate一无所知。希望这符合你或可能有人理解你的问题。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sqlalchemy as sqAl
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import xml.etree.ElementTree as ET
def generate_class(class_el):
type_map = {'java.lang.String': sqAl.String,
'java.util.Date': sqAl.Date,
'java.lang.Double': sqAl.Float,
'java.lang.Long': sqAl.Integer}
dynclass_dict = {
'id': sqAl.Column(sqAl.Integer, primary_key=True),
'__tablename__': class_el.attrib['table']
}
for field_el in class_el.findall('property'):
field = field_el.attrib
if field['type'] in type_map:
dynclass_dict[field['name']] = sqAl.Column(field['column'], type_map[field['type']])
return type(class_el.attrib['table'].capitalize(), (declarative_base(sqAl.MetaData()),), dynclass_dict)
classe = ET.parse('User.hbm.xml').getroot().find('class')
User = generate_class(classe)
if __name__ == '__main__':
# the two following lines create the table (if not already existing)
engine = sqAl.create_engine('sqlite:///data.db', echo=True)
User.__base__.metadata.create_all(engine, checkfirst=True)
session = sessionmaker(bind=engine)()
u = User(userFirstName="John F.", userLastName="Kennicknich", userName="jfk")
session.add(u)
session.commit() https://stackoverflow.com/questions/9194339
复制相似问题