Python sqlalchemy使用

基本结构
在这里插入图片描述

#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: JHC
@file: base_db.py
@time: 2023/6/19 21:34
@desc:
"""
from sqlalchemy import create_engine,text
from sqlalchemy.orm import sessionmaker,scoped_session
from contextlib import contextmanager
from sqlalchemy.pool import QueuePool
from sdk.base.base_tables import Base

class DB(object):
    """

    """
    def __init__(self,username,password,host,port,db,poll_size=50,debug=True):
        self.username = username
        self.password = password
        self.host = host
        self.port = port
        self.db = db
        self.poll_size = poll_size
        # 初始化数据库连接池:
        self.engine = create_engine(f'mysql+mysqlconnector'
                                    f'://{self.username}:{self.password}'
                                    f'@{self.host}:{self.port}/{self.db}',
                                    poolclass=QueuePool,pool_size=self.poll_size,echo=True if debug else False)
        self.__create_db()
        # 创建线程安全的DBSession类型:
        self.db_session = scoped_session(sessionmaker(bind=self.engine, autocommit=False))

    def __create_db(self):
        """
        新建表
        :return:
        """
        Base.metadata.create_all(self.engine, checkfirst=True)
    def run_origin_sql(self,session,sql):
        """
        执行原生sql
        :param session:
        :param sql:
        :return:
        """
        return session.execute(text(f"""{sql}"""))

    @contextmanager
    def get_session(self):
        """
        返回数据库连接对象
        :return:
        """
        session = self.db_session()
        try:
            yield session
            session.commit()
        except:
            session.rollback()
            raise
        finally:
            session.close()

base_tables.py

# !/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: JHC000abc@gmail.com
@file: base_tables.py
@time: 2023/12/9 21:57
@desc: 

"""
from sqlalchemy.ext.declarative import declarative_base


# 创建对象的基类,单写出来,避免循环引用
Base = declarative_base()

使用样例

from sdk.base.base_db import *
from db_tables.KDQ_USER_INFO import *
from db_tables.KDQ_CONTENT_INFO import *
from db_tables.KDQ_COMMENT_INFO import *
from test1 import *
import time

db = DB(host="127.0.0.1", port=3306, username="root", password="123456", db=DB_KDQ)
with db.get_session() as session:
	session.***

from db_tables.KDQ_USER_INFO import *
from db_tables.KDQ_CONTENT_INFO import *
from db_tables.KDQ_COMMENT_INFO import *
这三个是写的数据表表类
差不多长这样

# !/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: JHC000abc@gmail.com
@file: KDQ_USER_INFO.py
@time: 2023/12/9 21:54
@desc: 

"""
from sqlalchemy.sql import func
from sqlalchemy import Column,INT,VARCHAR,TEXT,Boolean,DateTime
from sdk.base.base_tables import Base

class UserInfo(Base):
    """
    用户信息表
    """

    __tablename__ = 'user_info'
    id = Column(INT,primary_key=True,autoincrement=True,nullable=False,index=True,unique=True)
    user_id = Column(INT,nullable=False,unique=True)
    user_name = Column(VARCHAR(50),nullable=False)
    nick_name = Column(VARCHAR(255),nullable=False)
    real_user_info = Column(VARCHAR(255),nullable=False)
    avatar = Column(TEXT,nullable=True)
    role_set = Column(TEXT,nullable=True)
    permission_set = Column(TEXT,nullable=True)
    email = Column(VARCHAR(100),nullable=False,default=0)
    mobile = Column(VARCHAR(11),nullable=False,default=0)
    gender = Column(VARCHAR(10),nullable=False)
    use_default_password = Column(Boolean,nullable=True,default=False)
    comment_num = Column(INT,nullable=False,default=0)
    like_num = Column(INT,nullable=False,default=0)
    view_num = Column(INT,nullable=False,default=0)
    follower_num = Column(INT,nullable=False,default=0)
    mute_num = Column(INT,nullable=False,default=0)
    create_time = Column(DateTime,nullable=False,default=func.now())
    update_time = Column(DateTime,nullable=False,default=func.now(),onupdate=func.now())
    __table_args__ = {
        'mysql_charset': 'utf8mb4'  # 设置字符集为utf8mb4
    }


DB_KDQ = "demo"

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机服务器中了Mallox勒索病毒怎么解密,Mallox勒索病毒解密步骤

计算机网络技术的不断发展与应用,为企业的生产运营提供了坚实的基础,大大提高了企业的生产与工作效率,但随之而来的网络安全威胁也在不断增加。在本月,云天数据恢复中心接到了很多企业的求助,企业的计算机服务器遭到了…

Nacos源码解读12——Nacos中长连接的实现

短连接 VS 长连接 什么是短连接 客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。 长连接 客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立…

数理统计基础:参数估计与假设检验

在学习机器学习的过程中,我充分感受到概率与统计知识的重要性,熟悉相关概念思想对理解各种人工智能算法非常有意义,从而做到知其所以然。因此打算写这篇笔记,先好好梳理一下参数估计与假设检验的相关内容。 1 总体梳理 先从整体结…

【Spring 基础】00 入门指南

【Spring 基础】00 入门指南 文章目录 【Spring 基础】00 入门指南1.简介2.概念1)控制反转(IoC)2)依赖注入(DI) 3.核心模块1)Spring Core2)Spring AOP3)Spring MVC4&…

用python 网络自动化统计交换机有多少端口UP

用python统计交换机有多少端口UP 用python统计交换机有多少端口UP,可以间接的反馈有多少个用户在线。我们使用上次的脚本将可达的网络设备ip统计到reachable_ip.txt中,这次我们使用reachable_ip.txt来登陆设备来统计多少端口是UP的 云配置 拓扑 交换机…

ModuleNotFoundError: No module named ‘docx‘

ModuleNotFoundError: No module named ‘docx’ 文章目录 ModuleNotFoundError: No module named docx背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时,报错: Traceback (most recent call last): Fi…

循环依赖:解析软件设计的迷局

目录 引言 循环依赖的本质 影响与挑战 1. 编译和构建问题 2. 耦合度增加 3. 难以进行单元测试 4. 可扩展性降低 解决循环依赖的策略 1. 模块重构 2. 引入接口抽象 3. 依赖注入 4. 模块化与分层设计 5. 使用工具进行分析 实际案例:Spring框架的循环依赖…

Redis高效恢复策略:内存快照与AOF

第1章:Redis宕机恢复的重要性和挑战 大家好,我是小黑。今天咱们来聊聊Redis宕机后的恢复策略。想象一下,你的网站突然宕机了,所有的数据都飘了,这种情况下,快速恢复数据就显得尤为重要。Redis作为一个高性…

令牌桶算法理解学习(限流算法)

令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。 用简单的话语来说就是限制…

研表究明,文字的序顺并不定一能响影GPT-4读阅

深度学习自然语言处理 原创作者:yy 很多年前,你一定在互联网上看过这张图,展示了人脑能够阅读和理解打乱顺序的单词和句子!而最近东京大学的研究发现,大语言模型(LLMs) 尤其是 GPT-4&#xff0c…

STM32 标准外设SPL库、硬件抽象层HAL库、低层LL库区别?

1、STM32 之一 HAL库、标准外设库、LL库_ZCShou的博客-CSDN博客_ll库(仔细阅读) 2、STM32标准外设库、 HAL库、LL库 - King先生 - 博客园 3、STM32 之 HAL库_戈 扬的博客(仔细阅读) 4、STM32 LL 为什么比 HAL 高效&#xff1…

文档或书籍扫描为 PDF:ScanPapyrus Crack

ScanPapyrus 可让您快速轻松地将文档或书籍扫描为 PDF,批处理模式使扫描过程快速高效,自动处理书籍并将其拆分为单独的页面 用于快速扫描文档、书籍或打印照片的扫描仪软件 快速扫描文档 使用此扫描仪软件,您无需在扫描仪和计算机之间来回移动…

架构LNMP

目录 1.安装Nginx服务 2.安装 MySQL 服务 3.安装配置 PHP 解析环境 4.部署 Discuz!社区论坛 Web 应用 1.安装Nginx服务 实验准备 systemctl stop firewalld systemctl disable firewalld setenforce 0 安装依赖包 yum -y install pcre-devel zlib-devel gcc…

【Python】Selenium自动化测试框架

设计思路 本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享。 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架,能适应日常测试工作需要。 1、使用Page Object模式将页面定位和业务操作分开&#xff0…

Gilisoft Video Editor——迈出剪辑的第一步

今天博主分享的是又一款剪辑软件——视频剪辑手(GiliSoft Video Editor),对剪辑视频感兴趣的小伙伴千万不要错过。这是一款专门用于视频剪辑的软件,功能比较简单,相比于专业的pr是比不了的,但是制作一些简单…

C/C++ 编程规范总结

目录 前言 一、编程规范的作用 二、规范的三种形式 三、规范的内容 1. 基本原则 原则1-1 原则1-2 原则1-3 原则1-4 原则1-5 原则1-6 原则1-7 2. 布局 规则2-1-1 规则2-1-2 规则2-1-3 规则2-1-4 规则2-1-5 规则2-1-6 规则2-2-1 规则2-2-2 规则2-2-3 建议2…

掌握iText:轻松处理PDF文档-基础篇

关于iText iText是一个强大的PDF处理库,可以用于创建、读取和操作PDF文件。它支持PDF表单、加密和签署等操作,同时支持多种字体和编码。maven的中央仓库中的最新版本是5.X,且iText5不是完全免费的,但是基础能力是免费使用的&…

pWnOS v2.0

该靶机绑定了静态IP地址 10.10.10.100,所以这里需要修改我们的网络配置!整个网段修改为10.10.10.0/24 信息收集 主机存活探测 arp-scan -l 端口信息探测 nmap -sT --min-rate 10000 -p- 10.10.10.100 (只开放了22 80端口) 服务…

2023-12-10 LeetCode每日一题(爬楼梯)

2023-12-10每日一题 一、题目编号 70. 爬楼梯二、题目链接 点击跳转到题目位置 三、题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 示例 2: 提…

【Python】手把手教你用tkinter设计图书管理登录UI界面(三)

上一篇:【Python】手把手教你用tkinter设计图书管理登录UI界面(二)-CSDN博客 下一篇: 紧接上一篇文章,继续完善项目功能:用户登录。由于老王的注册部分有亿点点复杂,还没完成,但是…