首先要导入SQLAIchemy模块

from sqlalchemy.ect.declaative import  declarative_base

创建orm基类

Base = declarative_base()

创建orm对象

class User(Base):
__tablename__ = "user" id = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(),index=True)

创建数据库链接

from sqlalchemy import create_engine
ngine = create_engine("mysql+pymysql://root:pwd@127.0.0.1:3306/user?charset=utf8")
备注:pwd表示密码,如果数据库属性中没有密码的话可以忽略,user是数据库名
# 数据库链接创建完成
# 去数据库中创建与User所对应的数据库表
# 去engine数据库中创建继承Base类所对应的数据表
Base.metadata.create_all(engine)

#############################################################################################################################

添加数据

首先打开数据库链接

from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:pwd@127.0.0.1:3306/user?charset=utf8")

创建会话窗口---打开数据库链接

from sqlalchemy.orm import  sessionmaker

创建会话

Session = sessionmaker(engine)

打开会话窗口

db_session = Session()

添加单条数据

user_obj=  User(name="ywb")
db_session.add(user_obj)

添加多条数据

db_session.add_all([
User(name="Alex"),
User(name="Wusir"),
User(name="Yuan") ])

开始执行操作

   db_session.commit()

执行完成之后关闭执行命令

db_session.close()

查询数据

 # 创建会话窗口
from sqlalchemy.orm import sessionmaker
from creat_table import engine,User Session = sessionmaker(engine)
db_session = Session() # 简单的查询语句
user_list = db_session.query(User).all()
for row in user_list:
print(row.id,row.name) # 单条查询
user = db_session.query(User).first()
print(user.id,user.name) # 带条件的查询
user_list = db_session.query(User).filter(User.id==).all()
print(user_list[].id,user_list[].name) user = db_session.query(User).filter_by(id=).first()
print(user.id,user.name) user_list = db_session.query(User).filter(User.id>=).all()
for row in user_list:
print(row.id,row.name) # 查询sql语句(拓展)
sql = db_session.query(User).filter(User.id>=)
print(sql)

查询数据

修改更新数据

 #修改数据

 # 建立会话
from sqlalchemy.orm import sessionmaker
# 导入链接数据库的模块
from creat_table import engine,User
# 开始创建会话
Session = sessionmaker(engine)
# 开启会话
db_session = Session() # 开始修改数据
res = db_session.query(User).filter(User.name=="ybw").update({"name":"哈哈哈"})
print(res) db_session.commit()
db_session.close()

修改更新数据

删除数据

 #删除数据

 from sqlalchemy.orm import sessionmaker
from creat_table import engine,User Session = sessionmaker(engine)
db_session = Session() # 删除 res = db_session.query(User).filter(User.id == ).delete()
print(res) db_session.commit()
db_session.close()

删除数据

建立一对多:的ForeignKey关系实现的增删改查

创建数据库

 #一对多操作

 from sqlalchemy.ext.declarative import declarative_base

 Base = declarative_base()

 from sqlalchemy import Column,String,Integer,ForeignKey
from sqlalchemy.orm import relationship class Student(Base):
__tablename__ = "student"
id = Column(Integer,primary_key=True)
name = Column(String())
school_id = Column(Integer,ForeignKey("school.id")) stu2sch = relationship("School",backref = "sch2stu") class School(Base):
__tablename__ = "school"
id = Column(Integer,primary_key=True)
name = Column(String()) from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/day127?charset=utf8")
Base.metadata.create_all(engine)

创建数据库

添加数据

 #   添加数据

 from sqlalchemy.orm import sessionmaker
from creat_table_ForeignKey import engine,Student,School Session = sessionmaker(engine)
db_session = Session() ## 添加数据 原始方法
sch_obj = School(name="OldBoyBeijing")
db_session.add(sch_obj)
db_session.commit()
sch = db_session.query(School).filter(School.name =="OldBoyBeijing").first()
stu_obj = Student(name="Yuan",school_id=sch.id)
db_session.add(stu_obj)
db_session.commit()
db_session.close() # 添加数据 反向添加 relationship sch_obj = School(name="OldBoyShanghai")
sch_obj.sch2stu = [Student(name="江疏影"),Student(name="周冬雨"),]
db_session.add(sch_obj)
db_session.commit()
db_session.close() # 添加数据 正向添加 relationship
stu_obj = Student(name="大黄鸭",stu2sch = School(name="OldBoyShenzhen"))
db_session.add(stu_obj)
db_session.commit()
db_session.close()

添加数据

查询数据

 #   查询数据

 from sqlalchemy.orm import sessionmaker
from creat_table_ForeignKey import engine,Student,School Session = sessionmaker(engine)
db_session = Session() # #.查询数据 正向查询数据 relationship
stu = db_session.query(Student).all()
for row in stu:
print(row.id,row.name,row.school_id,row.stu2sch.name) # #.查询数据 反向查询数据 relationship sch = db_session.query(School).all()
for school in sch:
for student in school.sch2stu:
print(school.id,school.name,student.name)

查询数据

修改数据

 #   更新数据

 from sqlalchemy.orm import sessionmaker
from creat_table_ForeignKey import engine,Student,School Session = sessionmaker(engine)
db_session = Session() # 修改数据 sch = db_session.query(School).filter(School.name=="OldBoyShanghai").first()
db_session.query(Student).filter(Student.name == "大黄鸭").update({"school_id":sch.id})
db_session.commit()
db_session.close()

修改数据

删除数据

 #   删除数据

 from sqlalchemy.orm import sessionmaker
from creat_table_ForeignKey import engine,Student,School Session = sessionmaker(engine)
db_session = Session() # 删除数据 sch = db_session.query(School).filter(School.name=="OldBoyShanghai").first()
db_session.query(Student).filter(Student.school_id == sch.id).delete()
db_session.commit()
db_session.close()

删除数据

高级版的查询操作

 # 高级版查询操作,厉害了哦
#老规矩
from my_create_table import User,engine
from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine)
db_session = Session() # 查询数据表操作
# and or
from sqlalchemy.sql import and_ , or_
ret = db_session.query(User).filter(and_(User.id > , User.name == 'DragonFire')).all()
ret = db_session.query(User).filter(or_(User.id < , User.name == 'DragonFire')).all() # 查询所有数据
r1 = db_session.query(User).all() # 查询数据 指定查询数据列 加入别名
r2 = db_session.query(User.name.label('username'), User.id).first()
print(r2.id,r2.username) # NBDragon # 表达式筛选条件
r3 = db_session.query(User).filter(User.name == "DragonFire").all() # 原生SQL筛选条件
r4 = db_session.query(User).filter_by(name='DragonFire').all()
r5 = db_session.query(User).filter_by(name='DragonFire').first() # 字符串匹配方式筛选条件 并使用 order_by进行排序
r6 = db_session.query(User).filter(text("id<:value and name=:name")).params(value=, name='DragonFire').order_by(User.id).all() #原生SQL查询
r7 = db_session.query(User).from_statement(text("SELECT * FROM User where name=:name")).params(name='DragonFire').all() # 筛选查询列
# query的时候我们不在使用User ORM对象,而是使用User.name来对内容进行选取
user_list = db_session.query(User.name).all()
print(user_list)
for row in user_list:
print(row.name) # 别名映射 name as nick
user_list = db_session.query(User.name.label("nick")).all()
print(user_list)
for row in user_list:
print(row.nick) # 这里要写别名了 # 筛选条件格式
user_list = db_session.query(User).filter(User.name == "DragonFire").all()
user_list = db_session.query(User).filter(User.name == "DragonFire").first()
user_list = db_session.query(User).filter_by(name="DragonFire").first()
for row in user_list:
print(row.nick) # 复杂查询
from sqlalchemy.sql import text
user_list = db_session.query(User).filter(text("id<:value and name=:name")).params(value=,name="DragonFire") # 查询语句
from sqlalchemy.sql import text
user_list = db_session.query(User).filter(text("select * from User id<:value and name=:name")).params(value=,name="DragonFire") # 排序 :
user_list = db_session.query(User).order_by(User.id).all()
user_list = db_session.query(User).order_by(User.id.desc()).all()
for row in user_list:
print(row.name,row.id) #其他查询条件
"""
ret = session.query(User).filter_by(name='DragonFire').all()
ret = session.query(User).filter(User.id > , User.name == 'DragonFire').all()
ret = session.query(User).filter(User.id.between(, ), User.name == 'DragonFire').all() # between 大于1小于3的
ret = session.query(User).filter(User.id.in_([,,])).all() # in_([,,]) 只查询id等于1,,4的
ret = session.query(User).filter(~User.id.in_([,,])).all() # ~xxxx.in_([,,]) 查询不等于1,,4的
ret = session.query(User).filter(User.id.in_(session.query(User.id).filter_by(name='DragonFire'))).all() 子查询
from sqlalchemy import and_, or_
ret = session.query(User).filter(and_(User.id > , User.name == 'DragonFire')).all()
ret = session.query(User).filter(or_(User.id < , User.name == 'DragonFire')).all()
ret = session.query(User).filter(
or_(
User.id < ,
and_(User.name == 'eric', User.id > ),
User.extra != ""
)).all()
# select * from User where id< or (name="eric" and id>) or extra != "" # 通配符
ret = db_session.query(User).filter(User.name.like('e%')).all()
ret = db_session.query(User).filter(~User.name.like('e%')).all() # 限制
ret = db_session.query(User)[:] # 排序
ret = db_session.query(User).order_by(User.name.desc()).all()
ret = db_session.query(User).order_by(User.name.desc(), User.id.asc()).all() # 分组
from sqlalchemy.sql import func ret = db_session.query(User).group_by(User.extra).all()
ret = db_session.query(
func.max(User.id),
func.sum(User.id),
func.min(User.id)).group_by(User.name).all() ret = db_session.query(
func.max(User.id),
func.sum(User.id),
func.min(User.id)).group_by(User.name).having(func.min(User.id) >).all()
""" # 关闭连接
db_session.close() orm_select_more

高级版查询操作

高级修改数据操作

 #高级版更新操作
from my_create_table import User,engine
from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine)
db_session = Session() #直接修改
db_session.query(User).filter(User.id > ).update({"name" : ""}) #在原有值基础上添加 -
db_session.query(User).filter(User.id > ).update({User.name: User.name + ""}, synchronize_session=False) #在原有值基础上添加 -
db_session.query(User).filter(User.id > ).update({"age": User.age + }, synchronize_session="evaluate")
db_session.commit() orm_update_more

高级修改操作

建立多对多:的ManyToMany

创建表关系:

 from sqlalchemy.ext.declarative import declarative_base

 Base = declarative_base()

 from sqlalchemy import Column,Integer,String,ForeignKey
from sqlalchemy.orm import relationship class Hotel(Base):
__tablename__="hotel"
id=Column(Integer,primary_key=True)
girl_id = Column(Integer,ForeignKey("girl.id"))
boy_id = Column(Integer,ForeignKey("boy.id")) class Girl(Base):
__tablename__="girl"
id=Column(Integer,primary_key=True)
name = Column(String(),index=True) #创建关系
boys = relationship("Boy",secondary="hotel",backref="girl2boy") class Boy(Base):
__tablename__="boy"
id=Column(Integer,primary_key=True)
name = Column(String(),index=True) from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:DragonFire@127.0.0.1:3306/dragon?charset=utf8") Base.metadata.create_all(engine) my_M2M.py my_M2M.py

创建表关系

基于relationship增加数据:

 from my_M2M import Girl,Boy,Hotel,engine

 # 创建连接
from sqlalchemy.orm import sessionmaker
# 创建数据表操作对象 sessionmaker
DB_session = sessionmaker(engine)
db_session = DB_session() # .通过Boy添加Girl和Hotel数据
boy = Boy(name="DragonFire")
boy.girl2boy = [Girl(name="赵丽颖"),Girl(name="Angelababy")]
db_session.add(boy)
db_session.commit() # .通过Girl添加Boy和Hotel数据
girl = Girl(name="珊珊")
girl.boys = [Boy(name="Dragon")]
db_session.add(girl)
db_session.commit() orm_M2M_insert.py orm_M2M_insert.py

基于relationship增加数据

基于relationship查询数据:

 from my_M2M import Girl,Boy,Hotel,engine

 # 创建连接
from sqlalchemy.orm import sessionmaker
# 创建数据表操作对象 sessionmaker
DB_session = sessionmaker(engine)
db_session = DB_session() # .通过Boy查询约会过的所有Girl
hotel = db_session.query(Boy).all()
for row in hotel:
for row2 in row.girl2boy:
print(row.name,row2.name) # .通过Girl查询约会过的所有Boy
hotel = db_session.query(Girl).all()
for row in hotel:
for row2 in row.boys:
print(row.name,row2.name) orm_M2M_select.py orm_M2M_select.py

基于relationship查询数据

SQLAlchemy 增删改查 一对一 多对多的更多相关文章

  1. SQLAlchemy 增删改查 一对多 多对多

    1.创建数据表 # ORM中的数据表是什么呢? # Object Relation Mapping # Object - Table 通过 Object 去操纵数据表 # 从而引出了我们的第一步创建数 ...

  2. 13,SQLAlchemy 增删改查 一对多 多对多

    今天来聊一聊 Python 的 ORM 框架 SQLAlchemy Models 是配置和使用比较简单,因为他是Django自带的ORM框架,也正是因为是Django原生的,所以兼容性远远不如SQLA ...

  3. SQLAlchemyの增删改查

    用a*my写原味sql from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, I ...

  4. SQLAlchemy增删改查

    sqlalchemy中让MySQL支持中文字符 engine = create_engine("mysql+pymysql://root:mysql8@localhost/mysqltest ...

  5. SQLAlchemy增删改查基本操作,及SQL基本技能样码(join,group)

    练了一天,基本的东东应该有感觉了. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Tabl ...

  6. 偏于SQL语句的 sqlAlchemy 增删改查操作

    ORM 江湖 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函数存储过程 ...

  7. Mybatis 接口方式对数据的增删改查 一对一关联查询

    数据库中有两个表 student 和studentInfo student表中的字段和数据 studentInfo表中的字段 ok数据库说完了,开始建立一个项目,对数据库中的数据进行操作吧 新建jav ...

  8. 饮冰三年-人工智能-Python-24 Django ORM增删改查

    一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...

  9. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

随机推荐

  1. springmvc 获取request response

    RequestContextHolder 获取request public HttpServletRequest getRequest() { return ((ServletRequestAttri ...

  2. 粉丝福利:收藏已久的Java架构资料免费送(仅限3天)

    有段时间没跟各位粉丝分享编程资源福利了,看了下自己的百度网盘,就剩下这个我认为是比较好的Java架构师学习资料了,相信这套资料可以对你进阶高级工程师有帮助. Java架构师技术进阶路线图 架构技术进阶 ...

  3. 01:django基础篇

    Django其他篇 目录: 1.1 django初探 1.2 第一个django项目 1.3 django render/redirect/HttpResponse 和 request.GET req ...

  4. php配置伪静态如何将.htaccess文件转换 nginx伪静态文件

    php通常设置伪静态三种情况,.htaccess文件,nginx伪静态文件,Web.Config文件得形式,如何将三种伪静态应用到项目中呢, 1,.htaccess文件 实例 <IfModule ...

  5. 将Medium中的博客导出成markdown

    Medium(https://medium.com)(需要翻墙访问)是国外非常知名的一个博客平台.上面经常有很多知名的技术大牛在上面发布博客,现在一般国内的搬运的技术文章大多数都是来自于这个平台. M ...

  6. vue 使用element-ui中的Notification自定义按钮并实现关闭功能以及如何处理多个通知

    使用element-ui中的Notification,只有一个message属性是有很大的操作空间,其余的都是写死的,无法进行扩展,达不到想要的效果.所以只能在message上下功夫. 在elemen ...

  7. http参数传递方式

    url传参 这种在各种method(get,post,delete,put)都能使用,解析速度快 body体中的参数 application/x-www-form-urlencoded 这应该是最常见 ...

  8. jquery.lazyload (JS懒加载框架使用详解)

    /** 本地加载方式加载JS*/        NSString *path = [[NSBundle mainBundle] pathForResource:@"jquery.js&quo ...

  9. MySQL之表查询

    语法执行顺序 from >>>从那张表 where >>> 全局的筛选条件 group by>>> 必须是用在where 之后一组就是为了接下来我 ...

  10. linux MySQL 初始化数据库

    #创建数据目录并且初始化 /bin/mysql_install_db –user=mysql