Python使用SQLAlchemy

news2024/11/18 0:12:20

Python使用SQLAlchemy

1 安装SQLAlchemy

备注:本文适用于SQLAlchemy>2.0

# 安装SQLAlchemy
pip install SQLAlchemy

# 安装pymysql
pip install pymysql

参考文档(SQLAlchemy>2.0)

https://docs.sqlalchemy.org/en/20/

创建数据库

# 创建数据库
CREATE DATABASE mytest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

# 切换数据库
USE mytest;

# 创建数据
CREATE TABLE article (
    a_id INT PRIMARY KEY AUTO_INCREMENT,
	a_title VARCHAR(50) NOT NULL,
	a_keyword VARCHAR(100) NOT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;

2 源代码

2.1 项目目录

在这里插入图片描述

2.2 config_db.py


from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import Session


from model.base_model import Base
from model.article import Article


class ConfigDB:

    acc = "root"
    pwd = "123456"
    host = "192.168.108.200"
    port = "3306"
    db_name = "mytest"

    def __init__(self):
        # 配置MySQL
        db_url = "mysql+pymysql://" + self.acc + ":" + self.pwd + "@" +self.host + ":" +self.port + "/" + self.db_name
        self.engine = create_engine(db_url)

        # 创建session
        self.session = Session(self.engine)

    # 如果设计表可以不执行
    def init_tables(self):
        # 创建全部的表
        Article.metadata.create_all(bind=self.engine)


session = ConfigDB().session

2.3 article.py

from sqlalchemy import Integer, String
from sqlalchemy.orm import mapped_column

from model.base_model import Base


class Article(Base):
    __tablename__ = "article"
    id = mapped_column("a_id", Integer, primary_key=True)
    title = mapped_column("a_title", String(50))
    keyword = mapped_column("a_keyword", String(100))

2.4 base_model.py

from sqlalchemy.orm import DeclarativeBase


class Base(DeclarativeBase):
    """
    声明MySQL基类
    """
    pass

2.5 service_article.py

from sqlalchemy.orm import Query

from config.config_db import session
from model.article import Article

"""
使用orm实现增删改查,也可以用Statements
"""

def add_data_one() -> int:
    # 创建对象
    article = Article()
    article.title = "Mason"
    article.keyword = "Mason"

    # 添加成功的数量
    success_number = session.add(article)
    # 添加数据
    session.commit()
    return success_number


def query_data_all():
    # 构建查询
    query = Query([Article], session=session)

    # 获取单个数据
    data_list:list = query.all()

    # 遍历数据
    for item in data_list:
        item:Article = item
        print(item.id, item.title)

    return data_list

def update_data_one() -> int:
    # 构建查询
    query = Query([Article], session=session)

    # 查询数据
    query_filter:Query = query.filter(
        Article.id == 1
    )

    # 更新数据
    success_number = query_filter.update({
        Article.title: "河南大学"
    })

    session.commit()
    return success_number


def delete_data_one() -> int:
    # 构建查询
    query = Query([Article], session=session)

    # 查询数据
    query_filter: Query = query.filter(
        Article.id == 7
    )

    # 删除数据
    success_number = query_filter.delete()
    session.commit()

    return success_number

2.6 main.py

from config.config_db import ConfigDB
from service.service_article import add_data_one, query_data_all, update_data_one, delete_data_one

ConfigDB().init_tables()


add_data_one()
query_data_all()
update_data_one()
delete_data_one()

3 执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/734200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是敏捷测试?

目录 前言: 敏捷测试的定义 敏捷测试的特点 为什么要敏捷测试 缩短价值交付周期 强调质量属于大家 化繁为简节省成本 敏捷测试VS. 传统测试 传统测试如何迁移到敏捷测试 1. 组织文化的转变 2. 组织架构的调整 3. 人员培训与指导 4. 轻流程 敏捷测试成…

电视访问Samba

文章目录 问题描述方案一:当贝播放器方案二:nPlayer方案三:Kodi 问题描述 本人使用小米 AX9000 路由器 移动硬盘组了个轻 NAS,想通过电视访问 Samba 看视频(也可以电脑开 SMB) 开启 Samba 功能 文件夹开…

SpringMVC第一讲:SpringMVC基础知识

一、MVC设计模式 MVC的全名是Model View Controller,是模型(Model)-视图(view)-控制器(controller)的缩写,是一种设计模式。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件…

SIFT(尺度不变特征变换)

Sift(尺度不变特征变换),全称是Scale Invariant Feature Transform Sift提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置、尺度、方向信息。 Sfit的应用范围包括物体辨别、机器人地图感知与导航、影像拼接、…

OpenCV 入门教程:膨胀和腐蚀操作

OpenCV 入门教程:膨胀和腐蚀操作 导语一、膨胀操作二、腐蚀操作三、示例应用3.1 图像增强3.2 边缘检测 总结 导语 膨胀和腐蚀是图像处理中常用的形态学操作,用于改变图像的形状和结构。在 OpenCV 中,膨胀和腐蚀是基于结构元素的像素操作&…

一零六三、进程调度算法模拟 (C语言实现)

目录 背景 程序实现 实现效果 背景 1、根据算法要求从键盘输入不少于四个进程信息(包括进程名称、进程到达时间、估计运行时间),RR算法输入不少于两种时间片的大小 2、输出进程的调度顺序、完成时间、周转时间、平均周转时间、平均带权周转…

Openlayers实战:点击某点,overlay显示经纬度坐标

在之前的实战中,我们在某个固定的位置显示鼠标位置的经纬度, 今天改变一种形式,即采用overlay的方式,点击某处,获得到经纬度坐标,显示在overlay层上面。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代码版权归大剑师兰特…

23款迈巴赫S480升级原厂主动式氛围灯+电动后门+前后手势感应

23款迈巴赫S480升级原厂主动式氛围灯原厂电动后门原厂手势控制 新车刚提,原厂配置升级,全新配件 配件齐全,准备上车 全套主动式氛围灯配件 氛围灯模块 前排驾驶位顶棚的手势感应 手势感应电脑模块 后排顶棚的手势感应 电动后门配件有锁机、电…

基于simulink使用光流法跟踪汽车(附源码)

一、前言 此示例演示如何使用光流估计在视频序列中检测和跟踪汽车。 二、模型 下图显示了使用光流跟踪汽车模型: 三、用光流结果跟踪汽车 该模型使用光流估计技术来估计视频序列的每一帧中的运动矢量。通过阈值化运动矢量,该模型创建包含移动对象斑点…

mysql学习--使用navicat查看数据库密码

数据库通常分为两种:关系型数据库和非关系型数据库,关系型数据库通常会建立很多二维数据表,形成一对一、一对多、多对多等关系;之后利用SQL语句查询我们所需要的数据;非关系型数据库基于Key-Value的对应关系,并且查询的…

机器学习 day24(多类分类模型,Softmax回归算法及其损失函数)

多类分类 多类分类问题仍然是分类问题,所以预测y的可能结果是少量的,而不是无穷多个,且对于多类分类它>2 如上图:左侧为二分类,右侧为多分类,可以通过决策边界来划分区域 Softmax回归算法 …

记录--在高德地图实现卷帘效果

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 介绍 今天介绍一个非常简单的入门级小案例,就是地图的卷帘效果实现,各大地图引擎供应商都有相关示例,很奇怪高德居然没有,我看了下文档发现其实也是可以…

Fastpillars论文解读

本论文是美团在pointpillar算法的基础上的改进。 主要改进点分为一下两个: 1.引入注意力机制对pillar内的特征进行提取,改善直接maxpooling导致的细粒度信息丢失。 2.参考CSPNet和RepVGG构建了一个全新的轻量化backbone。 一、pillar注意力机制特征提…

怎么把MP4转换成GIF?分享几个方法轻松转换!

如何将mp4转换为gif?在分享视频剪辑素材到社交媒体时,许多人会选择将其转换为gif格式。这是因为GIF文件加载速度更快,文件大小更小。此外,将MP4转换为GIF也方便人们在电子邮件和聊天应用程序中发送动态图像。下面,我们…

【Linux】文件描述符 (上篇)

文章目录 📖 前言1. 文件的预备知识2. 复习C语言的文件操作3. Linux系统级文件接口3.1 open、 close、 read、 write 接口:3.2 内核当中实现的映射关系:3.3 如何理解Linux下一切皆文件: 📖 前言 本章开始,…

python绘制带有误差棒的条形图

文章目录 bar和barh加入误差棒定制误差棒颜色 bar和barh 在matplotlib中,通过bar和barh来绘制条形图,分别表示纵向和横向的条形图。二者的输入数据均主要为高度x和标签height,示例如下 import matplotlib.pyplot as plt import numpy as np…

MySQL CDC技术方案梳理

本篇主要探讨MySQL数据同步的各类常见技术方案及优劣势对比分析,从而更加深层次的理解方案,进而在后续的实际业务中,更好的选择方案。 1 CDC概念 CDC即Change Data Capture,变更数据捕获,即当数据发生变更时&#xff…

Ubuntu: scp命令使用及Permission denied错误解决方案

scp命令介绍 scp 命令用于 Linux 之间复制文件和目录。scp 是 secure copy 的缩写, scp 是 Ubuntu 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp local_file remote_usernameremote_ip:remote_folder scp /Users/X.pem root192.168.1.247:/usr/local/ssl Permission…

java项目之高校校园点餐系统(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的闲一品交易平台。技术交流和部署相关看文末! 开发环境: 后端: 开发语言:Java 框架&#…

傻瓜式一键生成主子表

文章目录 傻瓜式一键生成主子表 简介创建主子表示例 根据已有主表创建子表示例 创建空属性主子表示例 总结 傻瓜式一键生成主子表 直接将xml导入到Studio里即可。下载文件连接: CSDN链接阿里云盘 简介 很多同学在创建主子表时,都会可能遇到如下一些问…