Python 全栈系列262 使用sqlalchemy(clickhouse)

说明

再补充一篇。之前连不上的原因也挺搞笑,大概是deepseek把我带偏了,

应该是
pip3 install clickhouse-sqlalchemy -i https://mirrors.aliyun.com/pypi/simple/

但是它教我
pip3 install sqlalchemy-clickhouse -i https://mirrors.aliyun.com/pypi/simple/

关键是这个包似乎还真的存在…

内容

在小哥的帮助下,我正常连上了clickhouse。 嗯,后来发现他说的对,还是chatgpt更好一点,少走弯路。最近deepseek用的有点多。

之前deepseek教错了,chatgpt很快就纠正过来了。倒不是大模型能力问题,主要还是在数据(知识)的更新上有差距。
在这里插入图片描述

言归正传,这次还是看怎么使用sqlalchemy 操作clickhouse。

小伙第一次帮我用Memory引擎实现了,因为对clickhouse了解还没那么多,我查了一下

在这里插入图片描述

总体上问题不大,但可能内存进入T时代会比较有安全感一些。现在还是要硬盘来兜。而且clickhouse的服务挺脆的,之前碰到断电关机,然后服务就再也起不来了。

import pandas as pd
from sqlalchemy import Column, Integer, String, create_engine
from clickhouse_sqlalchemy import make_session, engines
from sqlalchemy.orm import sessionmaker, declarative_base

# 连接字符串格式: clickhouse+http://<username>:<password>@<host>:<port>/<database 
engine = create_engine('clickhouse+http://xxx:xxx@127.0.0.1:18123/my_database')
if engine:
    print(1)
Base = declarative_base()

# Memory只存在内存中
# class User(Base):
#     __tablename__ = 'users'
#     id = Column(Integer, primary_key=True)
#     name = Column(String(50))
#     email = Column(String(50))
#     __table_args__ = (engines.Memory(),)# 指定表引擎,这里使用 Memory 引擎 


# MergeTree才会持久化
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    email = Column(String(50))
    __table_args__ = (
        engines.MergeTree(order_by=['id']),
    )

# 创建表 
Base.metadata.create_all(engine)
# 使用 sessionmaker 创建 Session 类 
Session = sessionmaker(bind=engine)
# 使用 with 语句管理 session with Session() as session:
with Session() as session:
    users = [User(id=i, name=f'古奇{i}', email=f'gq{i}@666.com') for i in range(30) ]
    session.add_all(users)
    session.commit()

其实都挺快的,一眨眼就好了
在这里插入图片描述
可以查看数据库
在这里插入图片描述

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一种 Python 的 SQL 数据库工具包,它支持多种数据库系统,并且提供了一种统一的方式来操作数据库。ClickHouse 是一款高性能的列式存储数据库管理系统(DBMS),主要用于在线分析处理(OLAP)任务。 当你想要使用 SQLAlchemy 来操作 ClickHouse 时,你需要通过特定的驱动或适配器将两者连接起来。尽管 SQLAlchemy 支持直接连接到一些常见的数据库(如 PostgreSQL、MySQL 等),但是默认并不包含对 ClickHouse 的支持。因此,通常需要依赖第三方提供的 SQLAlchemy 驱动或适配器。 ### 安装 SQLAlchemyClickHouse 驱动 首先,你需要安装 SQLAlchemy: ```bash pip install sqlalchemy ``` 然后,根据具体的 ClickHouse 驱动情况,安装相应的驱动。例如,如果使用的是 `clickhouse-driver` 库: ```bash pip install clickhouse-driver ``` ### 使用 SQLAlchemy 连接 ClickHouse 以下是一个使用 SQLAlchemy 和 `clickhouse-driver` 进行基本交互的例子: ```python from sqlalchemy import create_engine from clickhouse_driver import Client # 创建 ClickHouse 数据库引擎实例 engine = create_engine('clickhouse://username:password@host_or_ip:port/database_name') with engine.connect() as conn: # 执行查询 result = conn.execute("SELECT * FROM table_name").fetchall() for row in result: print(row) ``` 在这个例子中,我们首先创建了一个 ClickHouse 引擎实例,然后使用这个实例执行了 SQL 查询并获取数据。这只是一个基础示例,实际应用中可能会涉及到更复杂的操作,比如事务管理、表结构的操作等。 ### 相关问题: 1. **如何优化 ClickHouseSQLAlchemy 的性能?** - 包括选择合适的查询策略、索引设计以及合理利用 ClickHouse 的特性来提高查询效率。 2. **当使用 SQLAlchemyClickHouse 进行大数据量操作时需要注意哪些问题?** - 特别关注于内存管理和批量插入的最佳实践。 3. **是否有其他 Python 工具可以替代 SQLAlchemy 进行 ClickHouse 操作?** - 探讨是否还有其他库更适合集成到现有的 Python 开发环境中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值