Python一些可能用的到的函数系列132 ORM-sqlalchemy连clickhouse
说明
继续ORM的转换
通过ORM,可以:
- 1 用几乎一样的方式来操作不同的数据库
- 2 可以提供One的处理模式
内容
同步方式
这种方式更简单,适合处理小批量任务。这种操作严格来说,不是严格的One,而是MiniBatch,只是在某些时候,例如我自己的Interative Table,可以把这种方式视为One。真正的One还是要通过下面的异步方式来实现。
from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime, func
from sqlalchemy.orm import sessionmaker,declarative_base
from datetime import datetimedb_url = f"postgresql://USER:PASSWD@IP:PORT/postgres"# from urllib.parse import quote_plus
# the_passed = quote_plus('!@#*')
# # 创建数据库引擎
pg_engine = create_engine(db_url)# 创建基类
Base = declarative_base()# 定义数据模型
class NewsContent(Base):__tablename__ = 'some_table'__table_args__ = {'schema': 'some_schema'} # 指定模式id = Column(Integer, primary_key=True)mid = Column(String)content = Column(String)created = Column(DateTime)def dict(self):data_dict = {}data_dict['id'] = self.id data_dict['mid'] = self.mid data_dict['content'] = self.content data_dict['created'] = self.created return data_dict # 创建表
Base.metadata.create_all(pg_engine)# 创建会话
Session = sessionmaker(bind=pg_engine)
session = Session()# 随机选取100条数据 order_by(func.random()) 数据集太大或者索引没建好可能会非常慢
# random_news = session.query(NewsContent).limit(100).all()# >>>> 采用select in 的方式
# 查询最大id
max_id = session.query(func.max(NewsContent.id)).scalar()print(f"The maximum id is: {max_id}")import random# 定义范围和选择的数量
start = max_id-10000000
end = max_id
num_samples = 200# 从指定范围中随机选择
random_samples = random.sample(range(start, end + 1), num_samples)print(random_samples)# # 查询 ID 在集合中的记录
filtered_news = session.query(NewsContent).filter(NewsContent.id.in_(random_samples)).all()
filtered_news1 = [x.dict() for x in filtered_news ]
效果很好,速度很快。
异步方式
之后如果上生产了可以考虑这种方式
要使用 SQLAlchemy 异步连接 PostgreSQL,你可以结合 asyncio 和 SQLAlchemy 的异步支持。你使用的是 SQLAlchemy 2.x,而 SQLAlchemy 从 1.4 版本开始引入了对异步编程的支持,并在 2.x 版本中进一步强化和完善了这一功能。因此,SQLAlchemy 2.0.30 版本已经完全支持异步操作,特别是结合 asyncio 事件循环来异步连接数据库,如 PostgreSQL。
所以你当前使用的 SQLAlchemy 2.x 版本已经可以支持我之前提到的基于 asyncpg 的异步连接 PostgreSQL。这个版本的异步功能是通过 AsyncSession、create_async_engine 等接口来实现的。
以下是如何使用 SQLAlchemy 异步连接 PostgreSQL 的步骤:
1. 安装所需依赖
确保你已经安装了 asyncpg 和 SQLAlchemy 版本 1.4+ 及其他相关依赖。
pip install SQLAlchemy[asyncio] asyncpg
2. 配置异步连接
使用 async_engine 和 AsyncSession 来配置异步连接。
示例代码
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String# 定义模型的基础类
Base = declarative_base()# 定义数据库模型
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String)# 异步连接数据库
DATABASE_URL = "postgresql+asyncpg://user:password@localhost/dbname"# 创建异步引擎
engine = create_async_engine(DATABASE_URL, echo=True)# 创建异步会话工厂
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False
)# 异步函数:数据库交互
async def async_main():async with async_session() as session:async with session.begin():# 创建新用户new_user = User(name="Async User")session.add(new_user)# 查询数据result = await session.execute("SELECT * FROM users")users = result.fetchall()print(users)# 启动异步事件循环
asyncio.run(async_main())
主要步骤解析:
- 创建异步引擎:
create_async_engine()使用postgresql+asyncpg连接字符串。 - 异步会话:使用
sessionmaker()创建异步会话工厂,结合AsyncSession实现数据库的异步交互。 - 异步操作:在
async_main()中进行异步的数据库操作,如查询和添加数据。
注意事项:
- 异步操作必须在
async函数中执行,并通过await语句异步地进行数据库操作。 - 数据库的连接字符串需要使用
postgresql+asyncpg来指定asyncpg驱动。
这种方式可以有效利用异步 I/O,提高数据库操作的性能。
相关文章:
Python一些可能用的到的函数系列132 ORM-sqlalchemy连clickhouse
说明 继续ORM的转换 通过ORM,可以: 1 用几乎一样的方式来操作不同的数据库2 可以提供One的处理模式 内容 同步方式 这种方式更简单,适合处理小批量任务。这种操作严格来说,不是严格的One,而是MiniBatch,…...
华为 HCIP-Datacom H12-821 题库 (12)
有需要题库的可以看主页置顶 V群进行学习交流 1.设备使能 BGP 自动聚合功能后,可将 10.1.1.1/24 和 10.2.1.1/24路由聚合成以下哪一项? A、10.2.1.0/24 B、10.0.0.0/14 C、10.0.0.0/8 D、10.1.1.0/24 答案:C 解析: 暂无解析 2.关…...
pointpillar部署-TensorRT实现(三)
模型后处理 __global__ void postprocess_kernal(const float *cls_input,float *box_input,const float *dir_cls_input,float *anchors,float *anchor_bottom_heights,float *bndbox_output,int *object_counter,const float min_x_range,const float max_x_range,const flo…...
Java学习中,为什么会混淆类方法和实例方法,应该怎么办?
在Java学习过程中,初学者经常会混淆类方法(静态方法)和实例方法。这种混淆源于它们之间的概念和使用方式具有一定的相似性,但却在本质上存在较大的区别。理解并掌握两者的区别和应用场景,是掌握Java面向对象编程思想的…...
【人工智能学习笔记】4_3 深度学习基础之循环神经网络
循环神经网络(Recurrent Neural Network, RNN) 是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network),循环神经网络具有短期记忆能力 RNN核心思想 RNN的结构 一个典型…...
解锁生活密码,AI答案之书解决复杂难题
本文由 ChatMoney团队出品 介绍说明 “答案之书智能体”是您贴心的智慧伙伴,随时准备为您解答生活中的种种困惑。无论您在工作中遭遇瓶颈,还是在情感世界里迷失方向,亦或是对个人成长感到迷茫,它都能倾听您的心声,并给…...
Android Radio2.0——公告监听设置(四)
上一篇文章我们介绍了广播公告的注册及监听设置,这里我们来看一下广播公告添加监听的调用流程。 一、添加公告监听 1、RadioManager 源码位置:/frameworks/base/core/java/android/hardware/radio/RadioManager.java /*** 添加新的公告侦听器* @param enabledAnnouncemen…...
EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework
作者:周克勇,花名一锤,阿里巴巴计算平台事业部EMR团队技术专家,大数据领域技术爱好者,对Spark有浓厚兴趣和一定的了解,目前主要专注于EMR产品中开源计算引擎的优化工作。 背景和动机 SparkSQL多年来的性能…...
【VUE】实现当前页面刷新,刷新当前页面的两个方法(如何在一个页面写一个方法提供给全局其他地方调用)(如何重复调用同一个路由实现页面的重新加载)
实现前端某个页面刷新,非F5整个系统刷新,只刷新内容部分,按具体需求可以采用一下两个方式实现 方法一:路由快速切换实现页面重新加载 特点:只刷新页面而不是整个系统,样式会重新加载 本质:如何…...
【科研小小白】灰度化处理、阈值、反色、二值化、边缘检测;平滑;梯度计算;双阈值检测;非极大值抑制
什么是灰度化处理? 灰度化处理是将彩色图像转换为灰度图像的过程。在彩色图像中,每个像素通常由红(R)、绿(G)、蓝(B)三个通道组成。每个通道的取值范围通常在0到255之间。通过灰度化…...
数字经济时代,零售企业如何实现以消费者为中心的数字化转型?
在数字经济时代,零售企业正面临着前所未有的挑战与机遇。随着消费者行为的数字化和多样化,传统的零售模式已难以满足市场需求。为了在激烈的市场竞争中立于不败之地,零售企业必须实现以消费者为中心的数字化转型。这一转型不仅仅是技术的升级…...
微积分复习笔记 Calculus Volume 1 - 1.5 Exponential and Logarithmic Functions
1.5 Exponential and Logarithmic Functions - Calculus Volume 1 | OpenStax...
代码随想录 刷题记录-24 图论 (1)理论基础 、深搜与广搜
一、理论基础 参考: 图论理论基础 深度优先搜索理论基础 广度优先搜索理论基础 dfs dfs搜索可一个方向,并需要回溯,所以用递归的方式来实现是最方便的。 有递归的地方就有回溯,例如如下代码: void dfs(参数) {…...
MyBatis 缓存机制详解:原理、应用与优化策略
一、MyBatis 缓存概述 1.1 什么是缓存? 缓存是一种提高系统性能的技术,通过将常用的数据保存在内存中,减少对底层数据源(如数据库)的访问次数,从而加快数据读取速度。 在 MyBatis 中,缓存的主要目的是通过存储查询结果,减少对数据库的直接查询次数,提升系统性能。 …...
跨越技术壁垒:EasyCVR为何选择支持FMP4格式,重塑视频汇聚平台标准
随着物联网、大数据、云计算等技术的飞速发展,视频监控系统已经从传统的安防监控扩展到智慧城市、智能交通、工业制造等多个领域。视频流格式作为视频数据传输与存储的基础,其兼容性与效率直接影响到整个视频监控系统的性能。 在众多视频流格式中&#…...
美团OC感想
OC感想 晚上十点拿到美团意向了 到家事业部。,日常实习没过,暑期实习没过,秋招终于意向了,晚上十点发的,整整激动到一点才睡着,不仅因为这是秋招的第一个意向,更因为这是我一直心心念念想去的地…...
搜维尔科技:AcuMap - 针灸模拟VR训练解决方案
AcuMap第一个针灸VR训练解决方案。全面且医学上准确的人体映射,其中 14 条经络和 361 个穴位以 3D 形式可视化。您还可以在虚拟人体模型上模拟针刺。主要特点 - 可视化 14 条经络及其分支 - 基于 4 个主要类别的 361 个穴位:五行、危险穴位、补邪和特殊穴…...
WEB渗透权限维持篇-禁用Windows事件日志
往期文章WEB渗透权限维持篇-DLL注入\劫持-CSDN博客 WEB渗透权限维持篇-CLR-Injection-CSDN博客 WEB渗透权限维持篇-计划任务-CSDN博客 WEB渗透权限维持篇-DLL注入-修改内存中的PE头-CSDN博客 WEB渗透权限维持篇-DLL注入-进程挖空(MitreT1055.012)-CSDN博客 WEB渗透权限维…...
【设计模式】Template Method伪代码
1. 不好的代码 1.1 lib.cpp class Library{ public:void Step1(){//...}void Step3(){//...}void Step5(){//...} };1.2 app.cpp class Application{ public:bool Step2(){//...}void Step4(){//...} };int main() {Library lib();Application app();lib.Step1();if(app.Ste…...
关于2023.9.2~2023.9.10学习总结与教训
关于2023.9.2~2023.9.10学习总结与教训 语文古诗文与古诗基础阅读作文 数学几综卷子 英语物理政治总结待寻找的学习方法需应用的学习方法 语文 古诗文与古诗 背诵岳阳楼记和醉翁亭记的经验告诉我,应该在背诵时附以抄写同时在背下来后还应该去默写纠错,…...
保姆级教程:在PVE上5分钟搞定一个Ubuntu LXC容器,并配置好Docker环境
5分钟极速部署:PVE上Ubuntu LXC容器与Docker环境全自动配置指南 刚接触家庭服务器的朋友往往被复杂的虚拟化环境劝退。今天分享的这套方案,能让你在PVE平台上用不到5分钟时间,快速获得一个开箱即用的Ubuntu容器,并预装好Docker环境…...
163MusicLyrics全能工具:三步搞定音乐歌词高效解决方案
163MusicLyrics全能工具:三步搞定音乐歌词高效解决方案 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 163MusicLyrics是一款专注于音乐歌词获取与管理的开源…...
深入解析DHT11单总线通信:如何通过时序控制实现稳定数据传输?
1. DHT11单总线通信的基本原理 第一次用DHT11传感器时,我被它只用一根线就能传数据惊到了。这就像两个人打电话,不需要复杂的线路,只要一根电话线就能聊天气温湿度。DHT11采用的单总线协议(1-Wire Protocol)就是这样一…...
OpenClaw备份策略:Qwen3.5-9B重要数据自动同步到私有云盘
OpenClaw备份策略:Qwen3.5-9B重要数据自动同步到私有云盘 1. 为什么需要自动化备份方案 作为一个经常需要处理大量文档和代码的技术写作者,我经历过太多次因为系统崩溃或误操作导致工作成果丢失的惨痛教训。传统的备份方案要么需要手动操作(…...
【LaTex】花体字应用全指南:从基础到高级的字体美化技巧
1. LaTeX花体字入门:为什么需要字体美化? 第一次用LaTeX写论文时,我被导师退回的文档上画满了红圈:"数学符号要用黑板粗体"、"集合论部分需要手写体"、"正文变量用意大利斜体"。当时完全不明白为什…...
TouchGal Galgame社区完整指南:打造你的二次元游戏乐园
TouchGal Galgame社区完整指南:打造你的二次元游戏乐园 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next TouchGal是一个专…...
OpenClaw+Qwen3-VL:30B:低成本搭建飞书多模态机器人
OpenClawQwen3-VL:30B:低成本搭建飞书多模态机器人 1. 为什么选择本地部署多模态助手? 去年我在团队内部尝试用商业API搭建了一个飞书机器人,用于处理日常的图片识别和文档分析需求。三个月后收到账单时,发现仅图片识别这一项功…...
OpenClaw技能系统深度指南:打造能干活、守规矩、够聪明的工具化 AI 助手
手把手教你一键部署OpenClaw,连接微信、QQ、飞书、钉钉等,1分钟全搞定! AI 智能体想从只会动嘴皮子的“聊天机器人”变成真正能干活的“行动派”,能不能熟练使用工具就是一道分水岭。OpenClaw 的 Skills 系统,说白了就…...
[特殊字符]Java面试高频:阿里面试官追问——Redis为什么这么快?(3分钟速通版)
一、真实面试场景(代入感压迫感) 上周,我在做模拟面试辅导时,一个 3 年经验的同学被问到: 面试官:你项目里用到了 Redis,对吧? 那你说一下 —— Redis 为什么这么快? 他…...
JY61P陀螺仪串口数据解析实战:从协议到STM32代码实现
1. JY61P陀螺仪模块初探 第一次拿到JY61P这个六轴姿态传感器时,我下意识以为它和常见的MPU6050差不多。但实际用下来发现,这个国产模块在精度和易用性上都有明显优势。最让我惊喜的是它支持串口通信,完美避开了I2C协议那些令人头疼的时序问题…...
