当前位置: 首页 > article >正文

python sqlalchemy 操作数据库

        本篇文章分享使用python 的sqlalchemy框架操作数据库的方法,总共分三个步骤,第一步链接数据库,第二步定义entity,第三步操作数据库,下面是完整的演示

        第一步,链接数据库,它在名叫MysqlUtils的python文件中

# 数据库操作
from sqlalchemy import create_engine
from sqlalchemy.pool import QueuePool

# 本地
username = 'root'
password = 'root'
host = 'localhost'
port = '3306'
database = 'test'

# 创建连接引擎
engine = create_engine(f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}',
                       poolclass=QueuePool,
                       pool_size=10,
                       pool_timeout=30)

        第二步定义entity,我这个entity叫persion,除了id外,还有两个属性,username和passwd,它在名叫models的python文件中

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Person(Base):
    def __init__(self, username, passwd):
        self.username = username
        self.passwd = passwd

    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    username = Column(String)
    passwd = Column(String)

        第三步,操作数据库

from sqlalchemy.orm import sessionmaker
from sqlalchemy import func
from model import models
from utils.MysqlUtils import *
from sqlalchemy.sql.expression import text

Session = sessionmaker(bind=engine)
session = Session()


# 插入数据
def insert():
    p = models.Person("ti", "ti")
    session.add(p)
    session.commit()
    session.close()


# 查询总数
def query_total_count():
    total_count = session.query(func.count(models.Person)).scalar()
    # 关闭会话
    session.close()
    return total_count


# 查询所有
def query_all_data():
    # 查询所有用户
    persons = session.query(models.Person).all()
    for person in persons:
        print(f"Person ID: {person.id}, Name: {person.username}, Passwd: {person.passwd}")
    # 关闭会话
    session.close()


# 条件查询
def paginate_query(page_number, page_size):
    # 计算跳过的记录数
    offset = (page_number - 1) * page_size
    # 执行分页查询,这里假设User模型有name字段且非空
    persons = session.query(models.Person).filter(models.Person.username != 'abc').order_by(models.Person.id).offset(
        offset).limit(page_size).all()
    for person in persons:
        print(f"Person ID: {person.id}, Name: {person.username}, Passwd: {person.passwd}")


# 执行一个sql
def query_condition(sql):
    # 执行sql并获取所有结果
    result = session.execute(text(sql)).fetchall()
    print(result)
    persons = [models.Person(row[1], row[2]) for row in result]
    print(persons)
    # 关闭会话
    session.close()


# paginate_query(1, 10)
# insert()
query_all_data()
# query_condition('SELECT * FROM Person')

建个表试一下吧。


http://www.kler.cn/a/407913.html

相关文章:

  • 2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究
  • 力扣-位运算-1【算法学习day.41】
  • 【Linux】vim的使用
  • mq 消费慢处理方式,rocketmq消费慢如何处理,mq如何处理消费端消费速率慢。rocketmq优化
  • 【从零开始的LeetCode-算法】3232. 判断是否可以赢得数字游戏
  • 文件管理 II(文件的物理结构、存储空间管理)
  • uniapp发布android上架应用商店权限
  • 淘宝商品评论爬虫:Java版“窃听风云”
  • 【Unity How】Unity中如何实现物体的匀速往返移动
  • 开源动态表单form-create-designer 扩展个性化配置的最佳实践教程
  • 【Linux】内核驱动模块
  • 拥塞控制算法的 Utility-Function
  • pytorch自定义算子导出onnx
  • 深入理解下oracle 11g block组成
  • 游戏AI实现-决策树
  • mayo介绍和QTqmake编译基于Opencascade开发的mayo工程-小白配置
  • 【Python】除了Pandas,还有哪些方法可以连接Mysql数据库?(整理全)
  • CentOS中使用Python将文本中的IP地址替换为外网地址
  • 挑战 Cursor,Codeium 推出下一代 AI IDE Windsurf
  • 跟着问题学3——卷积神经网络详解
  • 【论文速读】| 迈向自动化渗透测试:引入大语言模型基准、分析与改进
  • archlinux安装waydroid
  • Rust 力扣 - 2266. 统计打字方案数
  • 开发中使用UML的流程_03 CIM-2:分析业务流程
  • 渗透测试笔记——shodan(4)
  • 深入解析UML组件图:概念、构成与实际应用