flask中orm增删改查操作

技术flask中orm增删改查操作 flask中orm增删改查操作flask中orm增删改查操作
一、创建表
# model.py
import datetime
from sqlalchemy imp

瓶中orm增删改查操作

flask中orm增删改查操作

一、创建表

# model.py

导入日期时间

从sqlalchemy导入创建引擎

来自sqlalchemy。延伸文件系统声明性导入声明性基

从结构化查询语言架构导入列、整数、字符串、文本、外键、日期时间、唯一约束、索引

来自sqlalchemy.orm导入关系

Base=declarative_base()

# make_declarative_base

类别用户(基本):

__tablename__='users' #数据库表名称

id=列(整数,主键=真)# id主键

名称=列(字符串(32),索引=真,可空=假)#名称列,索引,不可为空

年龄=列(整数)

电子邮件=列(字符串(32),唯一=真)

# datetime.datetime.now不能加括号,加了括号,以后永远是当前时间

ctime=列(日期时间,默认值=datetime.datetime.now)

额外=列(文本,可空=真)

def __repr__(自我):

返回自我名称

__table_args__=(

UniqueConstraint('id ',' name ',name='uix_id_name '),#联合唯一

索引(' ix_id_name ',' name ',' email ',#索引

)

男生班(基地):

__tablename__='boy '

id=列(整数,主键=真,自动增量=真)

名称=列(字符串(64),唯一=真,可空=假)

# 与生成表结构无关,仅用于查询方便,放在哪个单表中都可以

女孩=关系('女孩,次要='男孩2个女孩,背景='男孩)

def init_db():

'''

根据类创建数据库表

:return:

'''

引擎=create_engine(

MySQL pymysql ://root : root @ 127。0 .0 .1:3306/db _ flashkcharset=utf8 ',

max_overflow=0,#超过连接池大小外最多创建的连接

pool_size=5,#连接池大小

pool_timeout=30,#池中没有线程最多等待的时间,否则报错

pool_recycle=-1 #多久之后对线程池中的线程进行一次连接的回收(重置)

)

Base.metadata.create_all(引擎)

def drop_db():

'''

根据类删除数据库表

:return:

'''

引擎=create_engine(

MySQL pymysql ://root : root @ 127。0 .0 .1:3306/db _ flashkcharset=utf8 ',

max_overflow=0,#超过连接池大小外最多创建的连接

pool_size=5,#连接池大小

pool_timeout=30,#池中没有线程最多等待的时间,否则报错

pool_recycle=-1 #多久之后对线程池中的线程进行一次连接的回收(重置)

)

Base.metadata.drop_all(引擎)

if __name__=='__main__':

# 创建表

init_db()

# 删除表

# drop_db()

二、增加数据

来自sqlalchemy.orm导入sessionmaker

从sqlalchemy导入创建引擎

从模型导入U

sers
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/db_flask", max_overflow=0, pool_size=5)
Session = sessionmaker(bind=engine)
session = Session()
# ################ 添加 ################
# 1. 添加单条记录
obj1 = Users(name="randy", age=10)
session.add(obj1) # 返回及结果为none
# 2. 添加多条记录
user_obj1 = Users(name='laowang', age=14)
user_obj2 = Users(name='laozhang', age=12)
session.add_all([user_obj1, user_obj2])
# 提交
session.commit()
session.close()

三、删除记录

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from model import Users
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/db_flask", max_overflow=0, pool_size=5)
Session = sessionmaker(bind=engine)
session = Session()
################ 删除 ################
delete_num = session.query(Users).filter(Users.id == 2).delete()
# 删除的条数
print(delete_num)
session.close()

四、修改数据

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from model import Users
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/db_flask", max_overflow=0, pool_size=5)
Session = sessionmaker(bind=engine)
session = Session()
################ 修改 ################
# 方式一,以字典的方式修改
res = session.query(Users).filter(Users.id==1).update({'name': 'randysun', 'age': 18})
# 修改记录条数
print(res)
################ 修改 ################
# 方式一,以字典的方式修改
# res = session.query(Users).filter(Users.id==1).update({'name': 'randysun', 'age': 18})
# print(res)
# 方式二, 类似于django的F查询
# 拼接字符串需要将synchronize_session设置为 False
res = session.query(Users).filter(Users.id == 3).update({Users.name: Users.name + 'sun'}, synchronize_session=False)
# 修改记录条数
print(res)
# 数字增加需要将synchronize_session设置为 'evaluate'
res1 = session.query(Users).filter(Users.id == 3).update({Users.age: Users.age + 6}, synchronize_session='evaluate')
# 修改记录条数
print(res1)
session.commit()
session.close()

五、查询

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from model import Users
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/db_flask", max_overflow=0, pool_size=5)
Session = sessionmaker(bind=engine)
session = Session()
################ 查询 ################
# 方式一
res = session.query(Users).all()
res1 = session.query(Users)
# 对象列表
print(res)
print(res[0].name, res[0].age)
# 返回sql查询语句, 如果没有使用 .all或first就是sql语句
print(res1)
print(res1.all()[0].name)
# 方式二,取别名,必须用别名获取数据
res = session.query(Users.name.label('user_name'), Users.age.label('user_age')).all()
res1 = session.query(Users.name.label('user_name'), Users.age.label('user_age'))
print(res)
print(res[0].user_name, res[0].user_age)
# print(res[0].user, res[0].age) 报错
# SELECT users.name AS user_name, users.age AS user_age FROM users
print(res1)
print(res1.all()[0].user_name, res1.all()[0].user_age)
# 方式三
# filter查询传入的是表达式
res = session.query(Users).filter(Users.name == 'randy').first()
res1 = session.query(Users).filter(Users.name == 'randy')
print(res)
# sql语句 两者查询sql语句一样
print(res1)
print(res.name)
# filter_by 传入的是参数
res_filter_by = session.query(Users).filter_by(name='randysun').first()
res_filter_by1 = session.query(Users).filter_by(name='randysun')
print(res_filter_by)
# sql语句 两者查询sql语句一样
print(res_filter_by1)
print(res_filter_by.name)
session.close()

六、总结

  • query: 参数为类名则查询出来的数据是一个一个对象,如果参数为具体表字段,则查询出来的结果为具体的数据,query参数可以为其查询设置对应查询字段的别名,
  • add: 增加单条记录,参数为单条对象
  • add_all:增加多条数据,参数为对象列表
  • delete: 与查询条件filter一起连用删除具体的一条记录
  • update: 修改数据可以采用字典的形式,key为修改的字段,value要修改的值,类似django 中的F查询,但是字符串相加需要将synchronize_session 设置为True,数字相加需要将 synchronize_session设置为 ’evaluate‘
  • all:查询所有数据
  • filter:查询单条数据,参数为具体的条件表达式
  • filter_by: 查询单条数据,传入参数为具体为参数

添加,删除,修改数据都需要commit提交才能对数据操作成功

在当下的阶段,必将由程序员来主导,甚至比以往更甚。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/74730.html

(0)

相关推荐

  • java如何彻底理解volatile(java关键字volatile三种用法)

    技术Java Volatile关键字如何理解Java Volatile关键字如何理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。正文在谈

    攻略 2021年12月21日
  • LINQ查询的目的与实现手段是什么

    技术LINQ查询的目的与实现手段是什么这期内容当中小编将会给大家带来有关LINQ查询的目的与实现手段是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。LINQ查询从数据源中找到合适的

    攻略 2021年11月24日
  • 朋友圈可以关闭吗,最新版微信怎么关闭朋友圈

    技术朋友圈可以关闭吗,最新版微信怎么关闭朋友圈截至2019年3月份,朋友圈是微信的基础功能之一,没有类似QQ空间注销关闭的设置朋友圈可以关闭吗。除了可以对朋友圈动态进行设置某段时间可见,也可以对某些微信好友设置是否可见自

    生活 2021年10月29日
  • springboot整合druid

    技术springboot整合druid springboot整合druid一.SpringBoot整合Druid
    Druid是阿里巴巴的一个开源项目,是一个数据库连接池的实现,结合了C3P0、DBCP、

    礼包 2021年11月12日
  • Linux系统如何安装ST-Link v2烧录环境

    技术Linux系统如何安装ST-Link v2烧录环境这篇文章主要介绍Linux系统如何安装ST-Link v2烧录环境,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、首先我们需要安装必要的库和

    攻略 2021年11月18日
  • 如何修改IIS目录的ASP.NET版本

    技术如何修改IIS目录的ASP.NET版本这篇文章将为大家详细讲解有关如何修改IIS目录的ASP.NET版本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一个用于修改虚拟目录的ASP.

    攻略 2021年11月19日