首先要导入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. 代码编译时JDK版本和运行时JDK版本不一致启动项目报错

    java编译: java编译就是.java文件变成.class文件的过程,这个过程一般在我们常用的编译器中进行,例如Ecliplse和IDEA等:下面以IDEA举例: 执行上述编译使用的JDK版本就是 ...

  2. 【mysql】错误代码1308 Invalid use of NULL value

    错误原因是: 在最初设计表script_run_detail表时,resut_id忘记勾选不是null选项, 导致存储数据后发现result_id有NULL值,而实际上,我不希望这个字段可以存储NUL ...

  3. CSS3——注释 id 和 class 选择器 css创建(外部、内部、内联样式表)

    注释 /*         注释内容          */ id 和 class 选择器 id   ID属性不要以数字开头,数字开头的ID在 Mozilla/Firefox 浏览器中不起作用 < ...

  4. Python --链接MYSQL数据库与简单操作 含SSH链接

    项目是软硬件结合,在缺少设备的情况,需要通过接口来模拟实现与设备的交互,其中就需要通过从数据库读取商品的ID信息 出于安全考虑  现在很多数据库都不允许通过直接访问,大多数是通过SSH SSH : 数 ...

  5. 用matplotlib对数据可视化

    下图是要用到的数据集,反映了从1984到2016年的失业率的变化 1.导入可视化模块import matlibplot.pyplot as plt, 函数plt.plot(x, y)确定折线图的点,x ...

  6. 【Qt开发】Qt测试计算时间

    方法1 利用QTime,其精度为ms级 </pre><pre code_snippet_id="1852215" snippet_file_name=" ...

  7. Java String == && equal

    [.net超级群:27921837] Java中equals和==的区别 java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型.byte,short,char,int,long,flo ...

  8. 【转】mysqldump原理探究

    作者:胡儿胡儿 来源:CSDN 原文:https://blog.csdn.net/cug_jiang126com/article/details/49824471 —————————————————— ...

  9. 关于Pulsar与Kafka

    在本系列的Pulsar和Kafka比较文章中,我将引导您完成我认为重要的几个领域,并且对于人们选择强大,高可用性,高性能的流式消息传递平台至关重要.消息传递模型(Messaging model)是用户 ...

  10. read、readline 和 readlines 的区别?

    假设a.txt的内容如下所示: 1 Hello 2 Welcome 3 What is the fuck... read:读取整个文件. read([size])方法从文件当前位置起读取size个字节 ...