python sqlalchemy-orm-sqlite
使用老版sqlalchemy - orm sqllite执行demo程序 极简SQLAlchemy原生SQL Demo 规则所有SQL语句由调用者完整手写Navicat可直接运行无任何占位符? / :xxx 仅提供通用执行工具内部不拼接任何SQL from datetime import datetime from pathlib import Path from sqlalchemy import ( create_engine, Column, String, Text, Integer, Float, DateTime, JSON, text ) from sqlalchemy.orm import declarative_base, sessionmaker, Session # # 1. 引擎 会话不变 # DB_PATH Path(__file__).parent / orm_demo.db DATABASE_URL fsqlite:///{DB_PATH} engine create_engine( DATABASE_URL, connect_args{check_same_thread: False}, echoFalse, ) 可能是一个session工厂的function SessionLocal sessionmaker(autocommitFalse, autoflushFalse, bindengine) Base declarative_base() # # 2. 模型仅用于初始化建表业务不用ORM # class Article(Base): 仅初始化建表使用业务全部手写完整SQL __tablename__ articles id Column(Integer, primary_keyTrue, autoincrementTrue) title Column(String(200), nullableFalse) content Column(Text, default) author Column(String(100), default匿名) word_count Column(Integer, default0) rating Column(Float, default0.0) tags Column(JSON, nullableTrue) status Column(String(20), defaultdraft) created_at Column(DateTime, defaultdatetime.now) updated_at Column(DateTime, defaultdatetime.now, onupdatedatetime.now) # # 3. 极简通用工具函数核心无任何SQL拼接逻辑 # def get_session() - Session: return SessionLocal() def init_db(): 初始化数据库清空重建表 if DB_PATH.exists(): 直接删除 DB_PATH.unlink() Base.metadata.create_all(bindengine) print(f[INFO] 数据库初始化完成: {DB_PATH}) def fetch_one(full_sql: str): 执行完整查询SQL返回单条字典 :param full_sql: 调用者手写完整可直接在Navicat运行的SQL session get_session() try: sql text(full_sql) res session.execute(sql) row res.fetchone() return row._asdict() if row else None finally: session.close() def fetch_all(full_sql: str): 执行完整查询SQL返回全部结果列表 :param full_sql: 调用者手写完整可直接在Navicat运行的SQL session get_session() try: sql text(full_sql) res session.execute(sql) return [row._asdict() for row in res.fetchall()] finally: session.close() def execute_commit(full_sql: str) - int: 执行INSERT / UPDATE / DELETE完整SQL自动提交返回受影响行数 :param full_sql: 调用者手写完整可直接在Navicat运行的SQL session get_session() try: sql text(full_sql) res session.execute(sql) session.commit() return res.rowcount finally: session.close() # # 4. 事务通用工具多条完整SQL同一事务 # def transaction_execute(sql_list: list[str]): 事务执行多条完整SQL全部成功才提交任意异常全部回滚 :param sql_list: 完整SQL字符串列表每条都能单独在Navicat运行 session get_session() try: for sql in sql_list: session.execute(text(sql)) session.commit() print(✅ 事务全部执行成功已提交) return True except Exception as e: session.rollback() print(f 事务异常全部回滚: {e}) return False finally: session.close() # # 5. 调用示例所有SQL均为完整可直接Navicat运行 # def main(): print( * 60) print(极简原生SQL Demo - 全部SQL由调用者完整编写) print( * 60) init_db() # -------------------------- # 新增 - 完整INSERT SQL无占位符 # -------------------------- print(\n--- 新增文章完整SQL---) now datetime.now().isoformat() # 调用者自行拼接完整SQLNavicat直接执行 insert_sql f INSERT INTO articles (title, content, author, word_count, rating, tags, status, created_at, updated_at) VALUES (SQLAlchemy极简原生SQL, 全部SQL手写完整语句无任何占位符, 张三, 1200, 4.5, [Python,SQLAlchemy], published, {now}, {now}) execute_commit(insert_sql) insert_sql2 f INSERT INTO articles (title, content, author, word_count, rating, tags, status, created_at, updated_at) VALUES (FastAPI开发笔记, Web后端框架实战, 张三, 2500, 4.8, [Python,FastAPI], published, {now}, {now}) execute_commit(insert_sql2) # -------------------------- # 查询单条 # -------------------------- print(\n--- 根据ID查询单条 ---) select_one_sql SELECT * FROM articles WHERE id 1; article fetch_one(select_one_sql) print(f查询结果{article[title]}) # -------------------------- # 多条件分页查询完整SQL # -------------------------- print(\n--- 多条件分页查询 作者张三已发布 ---) select_page_sql SELECT * FROM articles WHERE author 张三 AND status published ORDER BY created_at DESC LIMIT 10 OFFSET 0; article_list fetch_all(select_page_sql) for item in article_list: print(f[{item[id]}] {item[title]}) # -------------------------- # 更新操作 完整UPDATE SQL # -------------------------- print(\n--- 更新文章评分 ---) update_sql UPDATE articles SET rating 5.0, updated_at 2026-07-26 14:30:00 WHERE id 1; execute_commit(update_sql) # -------------------------- # 删除操作 完整DELETE SQL # -------------------------- print(\n--- 创建临时文章并删除 ---) temp_insert_sql INSERT INTO articles (title, content, author, status) VALUES (临时待删文章, 测试删除, 测试, draft); execute_commit(temp_insert_sql) delete_sql DELETE FROM articles WHERE title 临时待删文章; execute_commit(delete_sql) # -------------------------- # 事务演示多条完整SQL一条异常全部回滚 # -------------------------- print(\n--- 事务回滚演示 ---) # 第二条SQL故意写错字段触发异常回滚 sql_batch [ INSERT INTO articles (title, author, status) VALUES (事务测试1, 测试, draft);, INSERT INTO articles (错误字段) VALUES (事务测试2);, ] transaction_execute(sql_batch) # -------------------------- # 最终全部数据查询 # -------------------------- print(\n--- 数据库全部文章 ---) all_sql SELECT id, title, author, rating, status FROM articles ORDER BY id; final_data fetch_all(all_sql) for row in final_data: print(f[{row[id]}] {row[title]} | 作者:{row[author]} | 评分:{row[rating]}) print(\n Demo 执行完毕) if __name__ __main__: main()

相关新闻

Java程序员该怎么样去看源码?

Java程序员该怎么样去看源码?

今天看到了一位博主分享自己阅读开源框架源码的心得,看了之后也引发了我的一些深度思考。我们为什么要看源码?我们该怎么样去看源码? 其中前者那位博主描述的我觉得很全了(如下图所示),就不做过多的赘述了&…

2026/7/27 9:27:23 阅读更多 →
ECEF转WGS84坐标转换:原理、C++实现与工程实践

ECEF转WGS84坐标转换:原理、C++实现与工程实践

1. 项目概述:从ECEF到WGS84的坐标转换在三维地理信息系统、卫星导航、无人机飞控或者任何需要处理地球空间数据的领域,我们经常会遇到两种核心的坐标表示方法:地心地固直角坐标系(ECEF)和世界大地坐标系(WG…

2026/7/27 9:27:23 阅读更多 →
如何快速提升浏览效率:LinkClump浏览器扩展终极指南

如何快速提升浏览效率:LinkClump浏览器扩展终极指南

如何快速提升浏览效率:LinkClump浏览器扩展终极指南 【免费下载链接】linkclump Google chrome extension that allows you to open multiple links at once. 项目地址: https://gitcode.com/gh_mirrors/li/linkclump 你是不是经常需要同时打开多个搜索结果&…

2026/7/27 9:27:23 阅读更多 →

最新新闻

5分钟轻松搞定!VMware Unlocker让Windows/Linux虚拟机完美运行macOS系统

5分钟轻松搞定!VMware Unlocker让Windows/Linux虚拟机完美运行macOS系统

5分钟轻松搞定!VMware Unlocker让Windows/Linux虚拟机完美运行macOS系统 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 还在为无法在VMware虚拟机中运行macOS而烦恼吗?VMware U…

2026/7/27 9:46:30 阅读更多 →
3个数据修复场景告诉你:为什么yfinance是金融数据分析的必备工具

3个数据修复场景告诉你:为什么yfinance是金融数据分析的必备工具

3个数据修复场景告诉你:为什么yfinance是金融数据分析的必备工具 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance 在金融数据分析中,数据质量问题常常是项…

2026/7/27 9:46:30 阅读更多 →
企业AI转型实战:从认知到落地的三维解决方案

企业AI转型实战:从认知到落地的三维解决方案

1. 企业AI转型的现状与挑战 最近两年,我接触了上百家传统企业的数字化转型案例,发现一个有趣的现象:几乎每家企业都在谈论AI,但真正能用AI创造商业价值的不足20%。这种"高认知、低落地"的现状,正是当前企业A…

2026/7/27 9:46:30 阅读更多 →
如何专业获取金融数据:yfinance实战指南

如何专业获取金融数据:yfinance实战指南

如何专业获取金融数据:yfinance实战指南 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance 在Python数据分析领域,获取准确可靠的金融数据是每个分析师和开发…

2026/7/27 9:46:30 阅读更多 →
艾尔登法环存档编辑器终极指南:轻松打造完美角色Build [特殊字符]

艾尔登法环存档编辑器终极指南:轻松打造完美角色Build [特殊字符]

艾尔登法环存档编辑器终极指南:轻松打造完美角色Build 🎮 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor 还在为重复刷…

2026/7/27 9:46:30 阅读更多 →
龙芯3B6000安装Docker 29.5.1+:从RPM仓库获取最高可用稳定版

龙芯3B6000安装Docker 29.5.1+:从RPM仓库获取最高可用稳定版

最近在龙芯 3B6000 上折腾 Docker,发现一个挺有意思的现象:很多人拿到新机器,第一反应就是去官网找最新版本的二进制包,或者照着通用教程用curl或yum直接安装。结果往往是依赖报错、版本冲突,或者装上了但跑不起来。其…

2026/7/27 9:45:30 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻