샘플 XML 기반 ORM 클래스에 대한 자신의 솔루션을 제공합니다. this tutorial에서 User.hbm.xml 파일을 읽습니다. 이것은 해킹입니다 - 나는 Hibernate에 대해 아무것도 모릅니다. 희망이 당신 또는 어쩌면 누군가가 귀하의 질문에 대한 이해를 elses.
#!/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()
출처
2013-09-11 17:38:12
TNT
대답은 "예", "예"및 "아니오"입니다. 아마도 당신은 당신의 문제를 해결하는 데 더 도움이되는 몇 가지 세부 사항이나 예를 들어보아야 할 것입니다. SQLAlchemy 문서의 어떤 부분이 혼란 스럽습니까? –
이것은 처음 조사하는 동안 질문입니다. 전문가들로부터 이것들을 확인하고 싶었습니다. 내 의도는 사용할 수있는 경우 xml 기반 매핑을 사용하는 것이 었습니다. 그렇지 않으면 선언적으로 가능한 것이 무엇이든간에 고전적으로도 가능하다는 것을 확인하십시오. 답을 고맙습니다. – Litty
'Table' 생성자에 대한'autoload' 인자를 확인하십시오. 이는 Hibernate의 인트로 스펙 션 (inrospection) 기능과 같은 종류이다. 단, 빌드 타임 대신 런타임에 완료된다는 점이 다르다. 그것은 당신을 도울 수 있습니다. – wberry