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)

相关推荐

  • Hibernate如何映射文件

    技术Hibernate如何映射文件这篇文章给大家分享的是有关Hibernate如何映射文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。由于JPA是不需要配置的,代码里面已经包括了注释,所以下

    攻略 2021年12月8日
  • 桂花的样子描写,描写桂花的姿态,至少5句话

    技术桂花的样子描写,描写桂花的姿态,至少5句话1、八月桂花的样子描写,我又嗅到了花香,桂花的香……有道是“八月桂花香”许是因为出生在八月,我格外觉得桂花香……夏的阳光,花的芬芳,不经意间,满眼的桂花树露出了笑脸,蝶舞双飞

    生活 2021年10月27日
  • MySQL性能优化的方法是什么

    技术MySQL性能优化的方法是什么本篇内容主要讲解“MySQL性能优化的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL性能优化的方法是什么”吧!一、优化思

    攻略 2021年12月3日
  • Scala尾递归的跟踪调用及局限方法是什么

    技术Scala尾递归的跟踪调用及局限方法是什么这篇文章主要讲解了“Scala尾递归的跟踪调用及局限方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala尾递归

    攻略 2021年12月9日
  • Python是怎么命名的

    技术Python是怎么命名的本篇内容介绍了“Python是怎么命名的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、A

    攻略 2021年12月1日
  • CentOS7安装Nginx1.13.7

    技术CentOS7安装Nginx1.13.7 CentOS7安装Nginx1.13.7一、安装依赖打开终端安装依赖软件  yum-yinstallgccgcc-c++autoconfautomakema

    礼包 2021年10月28日