首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlalchemy的xml配置

sqlalchemy的xml配置
EN

Stack Overflow用户
提问于 2012-02-08 13:34:36
回答 1查看 1.2K关注 0票数 2

有办法从模型类中提取python sqlalchemy映射吗?到目前为止,我一直在使用声明式映射,其中类将扩展声明性基。但是现在我想在生成的python模块中映射一些模型。所以我不能修改模型类。

  1. 我是否应该使用经典的映射器,即mapper()函数?
  2. 经典映射是否提供了所有选项作为声明映射?
  3. 是否有类似于hibernate hbm.xml文件的xml配置方式?

你好,小屁孩

EN

回答 1

Stack Overflow用户

发布于 2013-09-11 17:38:12

这里有一个示例,如何手工为基于xml的orm类创建您自己的解决方案。它从本教程读取User.hbm.xml文件。这是黑客-我对Hibernate一无所知。希望这符合你或可能有人理解你的问题。

代码语言:javascript
复制
#!/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()          
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9194339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档