当前位置:Gxlcms > 数据库问题 > python orm之sqlalchemy

python orm之sqlalchemy

时间:2021-07-01 10:21:17 帮助过:12人阅读

基础操作

  1. import sqlalchemy
  2. import threading
  3. import datetime
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy import create_engine
  6. from sqlalchemy import Column,Integer,String,Text,ForeignKey,DateTime,UniqueConstraint,Table
  7. from sqlalchemy.orm import sessionmaker,relationship
  8. engine = create_engine(‘mysql+mysqlconnector://root:123456@127.0.0.1:3306/pysql?charset=utf8‘,
  9. max_overflow=1, # 超过连接池大小外最多创建的连接
  10. pool_size=5,
  11. pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
  12. pool_recycle=-1) # 多久之后对线程池中的线程进行一次连接的回收(重置)
  13. Base = declarative_base()
  14. # def task(arg):
  15. # conn = engine.raw_connection()
  16. # cursor = conn.cursor()
  17. # cursor.execute(
  18. # "select * from role"
  19. # )
  20. # result = cursor.fetchall()
  21. # print(result)
  22. # cursor.close()
  23. # conn.close()
  24. #
  25. # for i in range(20):
  26. # t = threading.Thread(target=task, args=(i,))
  27. # t.start()
  28. class UserInfo(Base):
  29. __tablename__ = ‘user_info‘
  30. id = Column(Integer,primary_key=True,autoincrement=True)
  31. user_name = Column(String(64),index=True,nullable=False)
  32. email = Column(String(64), unique=True)
  33. # datetime.datetime.now不能加括号,加了括号,以后永远是当前时间
  34. create_time = Column(DateTime, default=datetime.datetime.now())
  35. update_time = Column(DateTime, default=datetime.datetime.now)
  36. role_id = Column(Integer,ForeignKey(‘role.id‘))
  37. # extra = Column(Text, nullable=True)
  38. role = relationship(‘Role‘, backref=‘user‘)
  39. # __table_args__ = (
  40. # UniqueConstraint(‘id‘, ‘name‘, name=‘uix_id_name‘), #联合唯一
  41. # Index(‘ix_id_name‘, ‘name‘, ‘email‘), #索引
  42. # )
  43. def __repr__(self):
  44. return ‘<UserInfo: user_name:%s,email:%s >‘ %(self.user_name,self.email)
  45. class Role(Base):
  46. __tablename__ = ‘role‘
  47. id = Column(Integer,primary_key=True,autoincrement=True)
  48. name = Column(String(64))
  49. status = Column(Integer)
  50. def __repr__(self):
  51. return ‘{"name":"%s","status":%d}‘%(self.name,self.status)
  52. role_authority = Table(‘role_authority‘,Base.metadata,
  53. Column(‘role_id‘,Integer,ForeignKey(‘role.id‘)),
  54. Column(‘api_authority_id‘,Integer,ForeignKey(‘api_authority.id‘))
  55. )
  56. class ApiAuthority(Base):
  57. __tablename__ = ‘api_authority‘
  58. id = Column(Integer,primary_key=True,autoincrement=True)
  59. url = Column(String(128),nullable=False,unique=True)
  60. method = Column(String(16),nullable=False)
  61. status = Column(Integer)
  62. roles = relationship("Role",secondary=role_authority,backref="authorities")
  63. # Base.metadata.create_all(engine)
  64. Connection = sessionmaker(bind=engine)
  65. session = Connection()
  66. # 新增
  67. # role = Role(name=‘admin‘,status=0)
  68. # role1 = Role(name=‘sys‘,status=1)
  69. # role2 = Role(name=‘user‘,status=2)
  70. #
  71. # user = UserInfo(user_name=‘Tom‘,email=‘354782154@qq.com‘,role=role)
  72. # user1 = UserInfo(user_name=‘Tom‘,email=‘354782156@qq.com‘,role=role1)
  73. # user2 = UserInfo(user_name=‘Tom‘,email=‘354782178@qq.com‘,role=role2)
  74. #
  75. # session.add_all([role,role1,role2,user,user1,user2])
  76. #
  77. # session.commit()
  78. # session.close()
  79. ‘‘‘修改1‘‘‘
  80. # user = session.query(UserInfo).get(3)
  81. # user.user_name = ‘Jack‘
  82. # print(user)
  83. ‘‘‘修改2‘‘‘
  84. # user2 = session.query(UserInfo).filter(UserInfo.id==5).update({‘user_name‘:‘Lili‘})
  85. ‘‘‘根据外键关系映射获取role对象‘‘‘
  86. # user2 = session.query(UserInfo).filter_by(id=5).first()
  87. # print(user2.role)
  88. ‘‘‘根据外键关系映射获取user对象‘‘‘
  89. # role = session.query(Role).get(4)
  90. # print(role.user)
  91. ‘‘‘and 查询 or 查询 条件查询 ‘‘‘
  92. # 不等于
  93. # roles = session.query(Role).filter(Role.status != 0).all()
  94. # print(roles)
  95. # 模糊查询
  96. # roles = session.query(Role).filter(Role.name.like(‘%se%‘)).all()
  97. # print(roles)
  98. # in查询
  99. # roles = session.query(Role).filter(Role.status.in_([1,2])).all()
  100. # print(roles)
  101. # is null
  102. # users = session.query(UserInfo).filter(UserInfo.user_name.is_(None)).all()
  103. # print(users)
  104. # is not null
  105. # users = session.query(UserInfo).filter(UserInfo.user_name.isnot(None)).all()
  106. # print(users)
  107. # and
  108. # from sqlalchemy import and_
  109. # users = session.query(UserInfo).filter(and_(UserInfo.user_name==‘Jack‘,UserInfo.role_id==4)).all()
  110. # print(users)
  111. # or
  112. # from sqlalchemy import or_
  113. # users = session.query(UserInfo).filter(or_(UserInfo.role_id==4,UserInfo.role_id==5)).all()
  114. # print(users)
  115. # 组合and or
  116. # from sqlalchemy import or_,and_
  117. # # 查询邮箱号以35开头并且role_id为4或者5
  118. # users = session.query(UserInfo).filter(and_(UserInfo.email.like(‘35%‘),or_(UserInfo.role_id==4,UserInfo.role_id==5))).all()
  119. # print(users)
  120. ‘‘‘分页‘‘‘
  121. # users = session.query(UserInfo).filter(UserInfo.id >= 2).limit(2).offset((1 - 1) * 2).all()
  122. # print(users)
  123. # 删除
  124. # res = session.query(UserInfo).filter(UserInfo.id==3).delete()
  125. # print(res)
  126. session.commit()
  127. session.close()

  

源码解读

 

python orm之sqlalchemy

标签:incr   rgs   date   limit   secondary   url   div   range   索引   

人气教程排行