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)

相关推荐

  • aabc的四字词语有哪些,aabc含反义词的四字词语

    技术aabc的四字词语有哪些,aabc含反义词的四字词语面面相觑aabc的四字词语有哪些、彬彬有礼、孜孜不倦、侃侃而谈、娓娓道来、惴惴不安、翩翩起舞、栩栩如生沾沾自喜、步步为营、炯炯有神、咄咄逼人研究研究、讨论讨论、商量

    生活 2021年10月22日
  • 为您的物联网系统选择合适的数据库的4个步骤分别是什么

    技术为您的物联网系统选择合适的数据库的4个步骤分别是什么本篇文章为大家展示了为您的物联网系统选择合适的数据库的4个步骤分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。为物

    攻略 2021年12月2日
  • 如何使用Eviews做辅助回归来检验模型是否存在多重共线性

    技术如何使用Eviews做辅助回归来检验模型是否存在多重共线性本篇文章为大家展示了如何使用Eviews做辅助回归来检验模型是否存在多重共线性,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有

    攻略 2021年11月9日
  • Python使用协程的缺点是什么

    技术Python使用协程的缺点是什么这篇文章给大家分享的是有关Python使用协程的缺点是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、多核资源不能使用:协程的本质是单线程,它不能同时

    攻略 2021年10月27日
  • 数据分析

    技术数据分析 数据分析数据预处理
    在本次数据分析过程中,缺失数据将被进一步划分成为三个部分,一类数据是数据为0的情况,一类是数据为空值的情况,一类是数据为特殊符号,例如“--”的数据。
    针对不同的数据缺

    礼包 2021年11月18日
  • 风衣怎么搭配好看,风衣里面怎么搭配比较好看

    技术风衣怎么搭配好看,风衣里面怎么搭配比较好看风衣外套是春秋季节必备的时尚单品,但是风衣虽经典,但不是什么人都能HOLD住的,风衣搭配不到位,根本无美感可言,很多人不清楚风衣里面穿什么好看,下面就一起看看风衣里面的搭配技

    生活 2021年10月30日