1、使用execute批量创建数据
self.db.execute(表名.__table__.insert(), [
{'字段名1': randint(1, 100), '字段名2':'aaa','字段名3': randint(1, 100)}
for i in xrange(500)
])
#提交数据
self.db.commit()
!
2、关于sqlalchemy的一对多的查询(重点也是常用的)
1、在一对多的处理中主要使用是一个表的一个字段是别的表某一列中指定的值(所谓的外键约束)
2、在一对多的关系表中子表中使用外键约束[ForeignKey(主表.列名)]注意点主表与子表关联的列的属性要一致
3、父与子表中互相查询使用relationship
4、新建一个学生表(student)和一个班级表(classes)
from sqlalchemy import create_engine, Column, Integer, String, Boolean, DateTime, ForeignKey
#导入relationship
from sqlalchemy.orm import relationship
#新创建一个学生表的类(子表)
class Student(Base):
__tablename__ = "student"
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(100), nullable=False)
create_time = Column(DateTime, default=datetime.now)
# 创建一个外键约束(在子表中创建外键约束,只能是父表中可枚举的值)
class_id = Column(Integer, ForeignKey('classess.id'))
"""
使用relationship()反向查找
理解:
在student表中可以通过classes查找到classess表里面的数据
在classess表里面可以通过students查找到student表里面的数据
"""
classes = relationship("Classess", backref="students")
# 创建一个班级表的类(父表)
class Classess(Base):
__tablename__ = "classess"
id = Column(Integer, primary_key=True, autoincrement=True)
classname = Column(String(100), nullable=False)
createtime = Column(DateTime, default=datetime.now)
查询:
#通过学生查询到该学生的班级
aa = self.db.query(Student).filter_by(id=1).first()
print aa.classes.classname
#查询班级下所有的学生
bb = self.db.query(Classess).filter_by(id=2).first()
for stu in bb.students:
print stu.username
参考:https://blog.csdn.net/kuangshp128/article/details/73413584