sqlalchemy
- 安装
- pip install sqlalchemy -i https://pypi.douban.com/simple
- 连接的时候依赖pymysql
创建表
- # -*- coding: utf-8 -*-
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column # 列
- from sqlalchemy import Integer, String # 属性
- Base = declarative_base() # django models
- # 创建表
- class User(Base):
- __tablename__ = 'user'
- id = Column(Integer, primary_key=True, autoincrement=True)
- name = Column(String(32), index=True, name='名字')
- # 数据库连接
- from sqlalchemy import create_engine
- engine = create_engine("mysql+pymysql://root:redhat@192.168.32.71:3306/my_sql?charset=utf8")
- # 去engine数据库中创建所有继承Base的表
- Base.metadata.create_all(engine)
增加数据
- # -*- coding: utf-8 -*-
- from .create import engine, User
- # 增加数据
- # 创建会话窗口
- from sqlalchemy.orm import sessionmaker
- Session = sessionmaker(engine)
- # 打开会话窗口
- db_session = Session()
- # ---单条数据
- user_obj = User(name='Ywb') # 实例化
- db_session.add(user_obj) # 相当于 insert into
- # 执行会化窗口中的所有操作
- db_session.commit()
- db_session.close()
- # ---增加批量数据
- db_session.add_all([
- User(name='peach'),
- User(name='小红')
- ])
- db_session.commit()
- db_session.close()
- # ---扩展
- user1 = User(name='11')
- user2 = User(name='12')
- user3 = User(name='13')
- user4 = User(name='14')
- db_session.add(user1)
- db_session.add(user2)
- db_session.add(user3)
- db_session.add(user4)
- db_session.commit() # 全部添加进去
- db_session.close()
单表查询
- # -*- coding: utf-8 -*-
- # 单表查询
- from sqlalchemy.orm import sessionmaker
- from SQLAlchemy.create import engine, User
- Session = sessionmaker(engine)
- db_session = Session()
- # ---基本查询
- # select * from name
- user_list = db_session.query(User)
- print(user_list) # SELECT user.`名字` AS `user_名字`, user.id AS user_id FROM user
- # ---------------- 所有数据 ------------------
- user_list = db_session.query(User).all() # [obj, obj]
- for usr in user_list:
- print(usr.name)
- # ---------------- 一条数据 ------------------
- user = db_session.query(User).first() # obj
- print(user.name)
- # ---------------- 带条件查询 ------------------
- # --- filter
- user_list = db_session.query(User).filter(User.id==2).all() # [obj, obj]
- print(user_list)
- user_list = db_session.query(User).filter(User.id >= 1).all() # [obj, obj]
- for user in user_list:
- print(user.id) # 按照id排序,因为添加是id
- # --- filter_by
- user = db_session.query(User).filter_by(id=2).first() # obj
- print(user)
- # --- 扩展-查看sql语句
- sql = db_session.query(User).filter(User.id >= 1)
- print(sql)
- """
- SELECT user.`名字` AS `user_名字`, user.id AS user_id
- FROM user
- WHERE user.id >= %(id_1)s
- """
修改
- # -*- coding: utf-8 -*-
- # 更新修改数据
- from sqlalchemy.orm import sessionmaker
- from SQLAlchemy.create import engine,User
- Session = sessionmaker(engine)
- db_session = Session()
- # 单条修改
- # update `uesr` set `name` = 'haha' where id =1
- res = db_session.query(User).filter(User.id==1).update({
- "name": 'haha'
- })
- print(res) # 返回影响的行数
- db_session.commit()
- db_session.close()
- # 批量修改
- res = db_session.query(User).filter(User.id > 1).update({
- "name": "1234"
- })
- print(res)
- db_session.commit()
- db_session.close()
删除
- # -*- coding: utf-8 -*-
- # 删除数据
- from sqlalchemy.orm import sessionmaker
- from SQLAlchemy.create import engine,User
- Session = sessionmaker(engine)
- db_session = Session()
- # 删除单条
- # delete from user where id = 1
- res = db_session.query(User).filter(User.id==1).delete()
- print(res) # 返回影响的行数
- db_session.commit()
- db_session.close()
- # 删除多条
- res = db_session.query(User).filter(User.name=="12345").delete()
- print(res)
- db_session.commit()
- db_session.close()
ForeignKey 创建表
- # -*- coding: utf-8 -*-
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column # 列
- from sqlalchemy import Integer, String, ForeignKey # 属性
- from sqlalchemy import create_engine
- from sqlalchemy.orm import relationship #
- Base = declarative_base() # django models
- class Student(Base):
- __tablename__ = 'student'
- id = Column(Integer, primary_key=True)
- name = Column(String(32))
- school_id = Column(Integer,ForeignKey("school.id")) # 外键关系 Fk
- # 反向光系(如果我想从Student看到School的信息,直接下下面方法),Student.stu2sch
- #如果School想拿Student的信息 那就只要School.backref里面的值, School.stu_sch
- stu2sch = relationship("School", backref="stu_sch")
- class School(Base):
- __tablename__ = 'school'
- id = Column(Integer, primary_key=True)
- name = Column(String(32))
- engine = create_engine("mysql+pymysql://root:redhat@192.168.32.71:3306/my_sql?charset=utf8")
- # 去engine数据库中创建所有继承Base的表
- Base.metadata.create_all(engine)