Python: SQLAlchemy 增、删、改、查

2023-11-06

目录

一、完整代码

1.1 代码

1.2 运行结果

二、增删改查

2.1 增加一行记录

2.2 修改一行记录

2.3 查询一行记录

2.4 删除一行记录


一、完整代码

1.1 代码

import uuid
import datetime
import sqlalchemy
import sqlalchemy.orm as orm
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class TDog(Base):
    __tablename__ = "dog"

    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
    name = sqlalchemy.Column(sqlalchemy.String(256), nullable=True)
    uuid = sqlalchemy.Column(sqlalchemy.String(64), unique=True)
    addtime = sqlalchemy.Column(sqlalchemy.DateTime())
    data = sqlalchemy.Column(sqlalchemy.Text(), default='{}')

    def __init__(self, name, uuid, data='{}', addtime=None):
        self.name = name
        self.uuid = uuid
        self.data = data
        self.addtime = addtime if None != addtime else datetime.datetime.now()


url = 'postgresql://dbuser:dbpassword@127.0.0.1:5432/zoodb'
engine = sqlalchemy.create_engine(url)
metadata = sqlalchemy.schema.MetaData(bind=engine)
Base.metadata.create_all(engine) # 创建表结构

Session = orm.sessionmaker(bind=engine)


def admq():
    sess = Session()

    # 增加一只狗
    uuidstr = str(uuid.uuid4())
    adog = TDog("doge", uuidstr)
    sess.add(adog)
    sess.commit()

    # 根据 uuid 字段,查询这只狗
    qdog = sess.query(TDog).filter(TDog.uuid == uuidstr).first()
    print("查询结果:", qdog.name, qdog.uuid, qdog.addtime)

    # 根据 uuid 字段修改这只狗
    data = {"name": "newdoge", "addtime": datetime.datetime.now()}
    sess.query(TDog).filter(TDog.uuid == uuidstr).update(data)
    sess.commit()
    # 查询一下修改后的结果
    qdog = sess.query(TDog).filter(TDog.uuid == uuidstr).first()
    print("修改后的查询结果:", qdog.name, qdog.uuid, qdog.addtime)

    # 根据 uuid 字段删除这只狗
    sess.query(TDog).filter(TDog.uuid == uuidstr).delete()
    sess.commit()
    # 查询一下修改后的结果
    qdog = sess.query(TDog).filter(TDog.uuid == uuidstr).first()
    if None == qdog:
        print("删除后:dog with uuid [{0}] is not exists".format(uuidstr))
    else:
        print("删除后:", qdog.name, qdog.uuid, qdog.addtime)

if "__main__" ==__name__:
    admq()

1.2 运行结果

查询结果: doge 52a23dd0-ea46-4681-b163-c7cf260edfb8 2021-11-24 16:16:10.699270
修改后的查询结果: newdoge 52a23dd0-ea46-4681-b163-c7cf260edfb8 2021-11-24 16:16:10.713411
删除后:dog with uuid [52a23dd0-ea46-4681-b163-c7cf260edfb8] is not exists

二、增删改查

2.1 增加一行记录

# 增加一只狗
uuidstr = str(uuid.uuid4())
adog = TDog("doge", uuidstr)
sess.add(adog)
sess.commit()

2.2 修改一行记录

# 根据 uuid 字段修改这只狗
data = {"name": "newdoge", "addtime": datetime.datetime.now()}
sess.query(TDog).filter(TDog.uuid == uuidstr).update(data)
sess.commit()

2.3 查询一行记录

# 根据 uuid 字段,查询这只狗
qdog = sess.query(TDog).filter(TDog.uuid == uuidstr).first()
print("查询结果:", qdog.name, qdog.uuid, qdog.addtime)

或者:

# 根据 uuid 字段,查询这只狗
query = orm.Query(TDog).filter(TDog.uuid == uuidstr)
qdog = query.with_session(sess).first()

2.4 删除一行记录

# 根据 uuid 字段删除这只狗
sess.query(TDog).filter(TDog.uuid == uuidstr).delete()
sess.commit()

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python: SQLAlchemy 增、删、改、查 的相关文章

随机推荐

  • SpringBoot--将微服务注册到Eureka Server上

    这节课我们一起来学习一下如何将微服务注册到Eureka Server上 关于如何操作Eureka 我们可以参考spring cloud的官方文档 我们先访问spring cloud的官网主页 如下图所示 目前官网Spring Cloud的最
  • pycharm专业版安装方法

    1 去官网下载安装包 有专业版 有社区版 专业版需要破解 社区版不要破解 2 打开pycharm应用程序安装64 bit 需要等待几秒 3 记住安装包解压位置 打开jetbrains 找到bin文件夹 D Program Files Jet
  • Java数据结构之优先级队列(堆)

    文章目录 一 优先级队列 一 概念 二 优先级队列的模拟实现 一 堆的概念 二 堆的存储结构 三 堆的创建 1 堆的创建和向下调整 2 堆的创建和向上调整 四 堆的插入和删除 1 堆的插入 堆的创建和向上调整 续 2 堆的删除 五 用堆模拟
  • Cadence 背景颜色设置

    目录 概述 一 Allegro PCB Designer 二 OrCAD Capture 三 总结 概述 有位粉丝问我 关于背景颜色设置问题 这里我写一篇文章吧 尽自己微薄之力帮助更多的人 加油 一 Allegro PCB Designer
  • 2.22笔记:linux命令不同颜色命令

    浅蓝色 表示软链接 灰色 表示其他文件 绿色 表示可执行文件 红色 表示压缩文件 蓝色 表示目录 红色闪烁 表示链接的文件有问题了 黄色 表示设备文件 包括block char fifo 管道文件 粉色 网络文件
  • bochs+gdb联调linux-0.11内核

    终于把bochs和gdb连起来了 下面描述下步骤以作记录 1 安装bochs 前面有篇文章介绍了bochs源码编译安装过程 这里安装也非常相似 只是命令稍微有些不同 configure enable gdb stub make make i
  • Java语言连接数据库时间读取错误的问题

    连接时候的数据库相关配置
  • pcie inbound和outbound关系

    Inbound PCI域訪问存储器域 Outbound 存储器域訪问PCI域 RC訪问EP RC存储器域 gt outbound gt RC PCI域 gt EP PCI域 gt inbound gt EP存储器域 EP訪问RC EP存储器
  • Jenkins插件下载失败两种处理办法

    持续集成 自动化部署 弹性伸缩教程 http edu csdn net course detail 6452 大家在使用jenkins安装插件的时候经常遇到一下问题 就是插件由于网络或者墙的原因无法直接下载 出现下面截图的问题 处理办法有两
  • flume采集log4j日志到kafka

    简单测试项目 1 新建Java项目结构如下 测试类FlumeTest代码如下 package com demo flume import org apache log4j Logger public class FlumeTest priv
  • 芯片电源引脚为什么要加一个100nF电容

    在设计电路的时候 常常会在芯片的每个电源引脚就近的放一个100nF的贴片电容 这电容有什么作用呢 今天就来和大家分享一下这个电容的作用以及为什么是100nF 首先这个芯片电源引脚的100nF的电容一般我们称为旁路电容 也有叫去耦电容的 因为
  • Oracle 行转列 动态出转换的列

    10月的第二天 前天写了个Oracle中行转列的pivot的基本使用方法 然后 因为pivot的用法中 正常情况下 我们需要转出多少个列 都得在我们的sql中完完整整地写出 而不能直接在里面写个查询来动态转换 然后 趁着祖国母亲的生日 这几
  • 漫谈设计模式之建造者模式(Builder)

    建造者模式 Builder 又叫生成器模式 属于对象创建型模式 建造者模式的目的是要将一个复杂对象的构建与它的表示分离 使得同样的构建过程可以创建不同的表示 产品 说得通俗点就是一个产品 表示 的构建 生产 过程是一样的 但是同样的生产过程
  • hdu 1465不容易系列之一

    http acm hdu edu cn showproblem php pid 1465 这是一道排错问题 用排错公式 排错公式推导 当n个编号元素放在n个编号位置 元素编号与位置编号各不对应的方法数用D n 表示 那么D n 1 就表示n
  • FISCO BCOS 2.0原理解析: 群组架构的设计

    为了方便企业 开发者更深入理解FISCO BCOS 2 0诸多新特性 更快速地运用FISCO BCOS搭建联盟链应用 我们启动了FISCO BCOS 2 0系列剖析的计划 在后续的推送中 我们将陆续推出 FISCO BCOS 2 0原理解析
  • LeetCode 260. 只出现一次的数字 III

    题目链接 https leetcode cn problems single number iii 思路如下 从头到尾依次异或数组中的每一个数字 那么最终得到的结果就是两个只出现一次的数字的异或结果 因为其他数字都出现了两次 在异或中全部抵
  • javascript求任意一组数的平均值

    代码 function getAvg 任意一组数求平均值 var sum 0 len arguments length i arguments是js函数中内置的类数组 它能像数组一样使用下标进行访问元素 for i 0 i
  • vue怎么改logo_vue项目添加网页logo

    网上关于为vue项目添加网页logo的文章很多 步骤很简单 但是博主还是踩了坑 特此记录一下 先上效果 1 首先 要为网页添加logo我们需要一张ico格式的图标 可以用网上的在线转换工具 将 jpg png 格式的图片转为 ico 格式
  • 防抖与节流函数

    文章目录 前言 节流函数代码 防抖函数代码 前言 防抖与节流是日常开发中常用的两个函数 目的都在于控制事件触发频率降低性能损耗和代码错误 节流 点击事件即开始计时 计时时间内无论触发多少次事件 都只执行触发计时的那个事件 防抖 点击事件即开
  • Python: SQLAlchemy 增、删、改、查

    目录 一 完整代码 1 1 代码 1 2 运行结果 二 增删改查 2 1 增加一行记录 2 2 修改一行记录 2 3 查询一行记录 2 4 删除一行记录 一 完整代码 1 1 代码 import uuid import datetime i