ORM外键关联

#coding=utf-8
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,DATE,ForeignKey
from sqlalchemy.orm import sessionmaker,relationship

engine = create_engine("mysql+pymysql://root:[email protected]/test1",   #建立数据库连接
                       encoding=‘utf-8‘, echo=False) #打印echo信息
#写中文的方式
#engine = create_engine("mysql+pymysql://root:[email protected]/test1?charser=utf8",
#                       encoding=‘utf-8‘, echo=False)
Base = declarative_base()  # 生成orm基类

class Student(Base):
    __tablename__ = ‘student‘
    id = Column(Integer,primary_key =True )
    name = Column(String(32),nullable= False)
    update_time = Column(DATE,nullable =False)

    def __repr__(self):
        return ‘(%s name: %s)‘%(self.id,self.name)

class StudyRecord(Base):
    __tablename__ = ‘study_record‘
    id = Column(Integer,primary_key= True)
    day = Column(Integer,nullable=False)
    status = Column(String(32),nullable=False)
    stu_id = Column(Integer,ForeignKey(‘student.id‘))  #w外键创建完成
    #study_obj = query(id= 1)
    #student = query(Student).filter(Student.id == stu_obj.stu_id).first()
    student = relationship(‘Student‘,backref = ‘my_study_record‘)     #StudyRecord可以通过调用Student。
                                                                         # student中可以通过my_study_record查到StudyRecord里面的内容
    def __repr__(self):
        return ‘(%s name: %s)‘%(self.id,self.day)

Base.metadata.create_all(engine)

Session_class = sessionmaker(bind=engine)
session = Session_class()
# s1 = Student(name = ‘zq‘,update_time = ‘2018-01-01‘)
# s2 = Student(name = ‘xiaohong‘,update_time = ‘2018-01-01‘)
# s3 = Student(name = ‘xiaoming‘,update_time = ‘2018-01-01‘)
# s4 = Student(name = ‘xiaohua‘,update_time = ‘2018-01-01‘)
# study_obj1 = StudyRecord(day = 1,status = ‘YES‘,stu_id =1 )
# study_obj2 = StudyRecord(day = 2,status = ‘YES‘,stu_id =1 )
# study_obj3 = StudyRecord(day = 3,status = ‘NO‘,stu_id =1 )
# study_obj4 = StudyRecord(day = 1,status = ‘YES‘,stu_id =2)
#session.add_all([s1,s2,s3,s4,study_obj1,study_obj2,study_obj3,study_obj4])   #pyhton中不能同时创建,会出错
#第二个表的id不是从1开始得,为什么?
#session.add_all([s1,s2,s3,s4])
# session.add_all([study_obj1,study_obj2,study_obj3,study_obj4])
# session.commit()
stuobj = session.query(Student).filter(Student.name==‘zq‘).first()
print stuobj.my_study_record

原文地址:https://www.cnblogs.com/qiangayz/p/8685167.html

时间: 2024-11-09 16:32:46

ORM外键关联的相关文章

使用sqlalchemy的ORM创建外键关联时报错

在学习使用sqlalchemy模块的时候踩了一个坑,分享一下. 埋下隐患 我先用下面的语句创建了一张学生信息表: > CREATE TABLE student ( -> id INT UNSIGNED AUTO_INCREMENT, -> name VARCHAR(20) NOT NULL, -> age TINYINT, -> PRIMARY KEY (id) -> ); 表里就3个字段:自增id(无符号的数字,自增id不会是负数,当然用无符号,感觉自己好专业),na

Django 之 ORM表之间的外键关联与多对多

实现环境表结构: models.py表单创建与代码 from django.db import models # Create your models here. class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=64,null=False,unique=True) def __str__(self): return "publishe

Entity Framework - 基于外键关联的单向一对一关系

代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关系的映射! 一对一关系的映射: 用户账户密码信息表:包含用户名 密码 邮箱等账户登录时的信息 public class SystemAccount { public SystemAccount() { Id = DateUtils.GeneratedNewGuid(); } public Guid

sqlalchemy多外键关联

一.前言 如果有张表A的多个字段关联另一张表B的一个字段,就如同一个客户表的账单地址和发货地址,同时关联地址表中的id字段. 二.事例 # -*- coding: UTF-8 -*- from sqlalchemy import create_engine from sqlalchemy import Integer, ForeignKey, String, Column from sqlalchemy.ext.declarative import declarative_base from s

Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate映射文件中主键自增规则.Hibernate实例状态(瞬时状态.持久化状态.托管状态).Hibernate初始化类获取session等方法 下图内容保存数据过程 下面内容保存数据顺序.查询数据方法 get().load()和延迟加载.删除数据 下图内容删除对象顺序.修改数据顺序 下面内容关联关系映射.

主键关联、外键关联的区别

主键关联.唯一外键关联 的区别 主键关联是指的一个表的主键和另外一个表的主键关联外键关联是指的一个表的主键和另外一个表的非主键关联 主键关联:    person_t:      person_id      address_id address_t      address_id      address_name 他们通过 address_id 关联是外键关联 person_t:      person_id      persion_name    address_t      perso

外键关联非主键id时-hbm.xml配置,及其分页查询DaoImpl

表关联时,外键关联非主键id时-hbm.xml配置: (由于hibernate默认为关联主键查询,故需要配置相关hql语句的属性) <many-to-one name="areas" class="com.hnqy.entity.Areas" fetch="select" property-ref="areaid" foreign-key="areaid"> <column name=&q

清除oracl中有主外键关联的表中的部分数据。

1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ' as v_sql from user_constraints where CONSTRAINT_TYPE='R') loop EXECUTE IMMEDIATE c.v_sql;end loop;end;2.清空数据源.清空所有数据.一般情况是对表进行条件删除.begin for ec in (

hibernate一对一双向外键关联

一对一双向外键关联:双方都持有对方的外键关联关系. 主控方和一对一单向外键关联的情况是一样的,主要的差异表现为,被空方需要添加: @OneToOne(mappedBy="card") //被控方 主控方必须交给其中的一方去控制,因为不可以双方都同时拥有控制对方的权利,假如是这样的话是没有办法保存成功的.这就是为什么需要指定mappenBy="card"的原因. 1.IdCard.java实体类: package oto_bfk; import javax.persi