博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLAlchemyの增删改查
阅读量:2225 次
发布时间:2019-05-09

本文共 6667 字,大约阅读时间需要 22 分钟。

用a*my写原味sql 

from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy import create_engineBase = declarative_base()# 创建单表class Users(Base):    __tablename__ = 'users'    id = Column(Integer, primary_key=True, autoincrement=True)    name = Column(String(32))    extra = Column(String(16))# 数据库连接相关engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")def init_db():    # 创建表    Base.metadata.create_all(engine)def drop_db():    # 删除表    # Base.metadata.drop_all(engine)    passif __name__ == '__main__':    # drop_db()    init_db()
models
from sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")cur = engine.execute('SELECT * FROM users')result = cur.fetchall()print(result)
原味sql

用a*my写ORM增删改查 

from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, String, UniqueConstraint, Index, DateTime, ForeignKeyfrom sqlalchemy import create_enginefrom sqlalchemy.orm import relationshipimport datetimeBase = declarative_base()class Classes(Base):    __tablename__ = 'classes'    id = Column(Integer, primary_key=True, autoincrement=True)    name = Column(String(32), nullable=False, unique=True)class Student(Base):    __tablename__ = 'student'    id = Column(Integer, primary_key=True, autoincrement=True)    username = Column(String(32), nullable=False, index=True)    password = Column(String(64), nullable=False)    ctime = Column(DateTime, default=datetime.datetime.now)    class_id = Column(Integer, ForeignKey("classes.id"))    # 关联字段     backref = 反向字段    cls = relationship("Classes", backref='stus')class Hobby(Base):    __tablename__ = 'hobby'    id = Column(Integer, primary_key=True)    caption = Column(String(50), default='篮球')class Student2Hobby(Base):    __tablename__ = 'student2hobby'    id = Column(Integer, primary_key=True, autoincrement=True)    student_id = Column(Integer, ForeignKey('student.id'))    hobby_id = Column(Integer, ForeignKey('hobby.id'))    __table_args__ = (        UniqueConstraint('student_id', 'hobby_id', name='uix_student_id_hobby_id'),        # Index('ix_id_name', 'name', 'extra'),    )def init_db():    # 数据库连接相关    engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")    # 创建表    Base.metadata.create_all(engine)def drop_db():    engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")    # 删除表    Base.metadata.drop_all(engine)if __name__ == '__main__':    # drop_db()    init_db()
0.models
import modelsfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")XXXXXX = sessionmaker(bind=engine)session = XXXXXX()# 单条插入# obj = models.Classes(name='第一期')# session.add(obj)# session.commit()# 多条插入# objs = [#     models.Classes(name='第二期'),#     models.Classes(name='第三期'),#     models.Classes(name='第四期'),#     models.Classes(name='第五期'),# ]## session.add_all(objs)# session.commit()session.close()
1.增
import modelsfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")session = sessionmaker(bind=engine)()result = session.query(models.Classes).all()for item in result:    print(item.id,          item.name)session.close()
2.查
import modelsfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")session = sessionmaker(bind=engine)()session.query(models.Classes).filter(models.Classes.id>4).delete()session.commit()session.close()
3.删
import modelsfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")session = sessionmaker(bind=engine)()session.query(models.Classes).filter(models.Classes.id > 0).update({models.Classes.name: models.Classes.name + '666'},                                                                   synchronize_session=False)session.commit()session.close()
4.改
import modelsfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engine,textengine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")session = sessionmaker(bind=engine)()# 1 别名查询result = session.query(models.Classes.id, models.Classes.name.label('xx')).all()    # label 起别名for item in result:    print(item.id, item.xx)# 2. filter接表达式/filter_by接参数r3 = session.query(models.Classes).filter(models.Classes.name == "anne").all()r4 = session.query(models.Classes).filter_by(name='anne').all()# 3. 子查询result = session.query(models.Classes).from_statement(text("SELECT * FROM classes where name=:name")).params(name='ed').all()result = session.query(models.Classes).from_statement(text("SELECT * FROM classes where name=:name")).params(name='ed')# 子查询ret = session.query(models.Classes).filter(models.Classes.id.in_(session.query(models.Classes.id).filter_by(name='eric'))).all()# 关联子查询subqry = session.query(func.count(Server.id).label("sid")).filter(Server.id == Group.id).correlate(Group).as_scalar()result = session.query(Group.name, subqry)session.close()
5.子查询
import modelsfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/day128?charset=utf8")session = sessionmaker(bind=engine)()1.在学生表中插入数据obj = models.Student(username='anne', password=123, class_id=3)obj = models.Student(username='bob', password=123, class_id=3)obj = models.Student(username='fry', password=123, class_id=3)session.add(obj)session.commit()2. 在学生表中找到anneobj = session.query(models.Student).filter(models.Student.username=='anne').first()print(obj.id)3. 找到所有学生,并打印信息方法1objs =session.query(models.Student).all()for obj in objs:    cls_obj = session.query(models.Classes).filter(models.Classes.id ==obj.class_id).first()    print(obj.id,obj.username,obj.class_id,cls_obj.name)方法2objs = session.query(models.Student.id,                     models.Student.username,                     models.Classes.name).join(models.Classes,isouter=True).all()print(objs)方法3objs = session.query(models.Student).all()for item in objs:    print(item.id, item.username, item.class_id, item.cls.name)# 4. 第三期所有的学生obj = session.query(models.Classes).filter(models.Classes.id == 3).first()student_list = obj.stus  # 反向查询for item in student_list:    print(item.id, item.username)session.close()
6.跨表

.

转载于:https://www.cnblogs.com/iyouyue/p/8983163.html

你可能感兴趣的文章
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
leetcode 130. Surrounded Regions
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
【JMeter】1.9上考试jmeter测试调试
查看>>
【虫师】【selenium】参数化
查看>>
【Python练习】文件引用用户名密码登录系统
查看>>
学习网站汇总
查看>>
【Loadrunner】性能测试报告实战
查看>>
【自动化测试】自动化测试需要了解的的一些事情。
查看>>
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>