day40 ORM sqlalchemy

 

一对多(2017-8-2 16:11:42)

import sqlalchemy
from sqlalchemy import  create_engine,and_,or_,func,Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey
from  sqlalchemy.orm import sessionmaker,relationship
engine=create_engine('mysql+pymysql://root:123@127.0.0.1:3306/tt?charset=utf8',echo=True)
#有中文的要加charset
Base=declarative_base()

class Father(Base):
    __tablename__ = 'father'
    id= Column(Integer,primary_key=True)
    name = Column(String(20))
    age = Column(Integer)
    def __repr__(self):
        return "<Father(name='%s')>" % self.name

class Son(Base):
    __tablename__= 'son'
    id = Column(Integer,primary_key=True)
    name = Column(String(20))
    father_id = Column(Integer, ForeignKey('father.id')) #外键建在数量更多的一方
    father = relationship("Father",backref="son",order_by=id) # 可能要先建立关系 下面才能在表中联系
    def __repr__(self):
        return "<Son(name='%s')>" % self.name
#建表时要注意顺序,被加外键的要建在前面
#出现外键错误的时候一般:1.两张表里要设主键和外键的字段的数据类型或者数据长度不一样;2.其中一个表里有数据了;
Base.metadata.create_all(engine) #创建表格
# Base.metadata.drop_all(engine) #删除表格

# 插入数据
Session = sessionmaker(bind=engine)
session = Session()

f1=Father(name='ge',age=12)
s1=Son(name='wew',father_id=1)

session.add_all([f1,s1])# 如果有多个,可以一起加在同一个表中;
session.commit()
View Code

 

import sqlalchemy
from sqlalchemy import  create_engine,and_,or_,func,Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey
from  sqlalchemy.orm import sessionmaker,relationship
engine=create_engine('mysql+pymysql://root:123@127.0.0.1:3306/tt?charset=utf8',echo=False)
#有中文的要加charset
Base=declarative_base()

class Father(Base):
    __tablename__ = 'father'
    id= Column(Integer,primary_key=True)
    name = Column(String(20))
    age = Column(Integer)
    def __repr__(self):
        return "<Father(name='%s')>" % self.name

class Son(Base):
    __tablename__= 'son'
    id = Column(Integer,primary_key=True)
    name = Column(String(20))
    father_id = Column(Integer, ForeignKey('father.id')) #外键建在数量更多的一方
    father = relationship("Father",backref="son",order_by=id) # 可能要先建立关系
    def __repr__(self):                                         #下面才能在表中联系 backrefs 反向的relationship
        return "<Son(name='%s')>" % self.name
#建表时要注意顺序,被加外键的要建在前面
#出现外键错误的时候一般:1.两张表里要设主键和外键的字段的数据类型或者数据长度不一样;2.其中一个表里有数据了;
Base.metadata.create_all(engine) #创建表格
# Base.metadata.drop_all(engine) #删除表格

# 插入数据
Session = sessionmaker(bind=engine)
session = Session()

# r1=session.query(Father).filter_by(id=1).first() # .first 是拿到第一个结果 类型是对象
                   # filter()里面放条件判断     # .all是拿到一个列表
#relationship

# 关联查询
# ret=session.query(Father.name,Son.id.label('kk')).join(Son)
# .label是命名
# 不加first 或者all 打印出来的是一条sql语句
# print(ret)
# SELECT father.name AS father_name, son.id AS son_id
# FROM father INNER JOIN son ON father.id = son.father_id
# f1=Father(name='ge',age=12)
# s1=Son(name='wew',father_id=1)

# session.add_all([f1,s1])# 如果有多个,可以一起加在同一个表中;
session.commit()
View Code

 

转载于:https://www.cnblogs.com/ezway/p/7274525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值