简单点击方言

clickhouse-sqlalchem的Python项目详细描述


单击House SqlAlchemy

单击“SQLAlchemy到ClickHouse database的内部方言”

https://img.shields.io/pypi/v/clickhouse-sqlalchemy.svghttps://img.shields.io/pypi/l/clickhouse-sqlalchemy.svghttps://img.shields.io/pypi/pyversions/clickhouse-sqlalchemy.svghttps://coveralls.io/repos/github/xzkostyan/clickhouse-sqlalchemy/badge.svg?branch=masterhttps://img.shields.io/travis/xzkostyan/clickhouse-sqlalchemy.svg?branch=master

安装

可以使用pip

安装包
pip install clickhouse-sqlalchemy

接口支持

连接参数

clickhouse sqlalchemy对连接字符串使用以下语法:

'clickhouse+<driver>://<user>:<password>@<host>:<port>/<database>[?key=value..]'

其中:

  • driver是要使用的驱动程序。可能的选择:httpnativehttp是默认值。
  • database是数据库连接到的。默认值是default

驱动程序选项

查询字符串中可以指定多个选项。

http

  • port是clickhouse服务器绑定到的端口。默认值是8123
  • timeout秒。默认情况下没有超时。
  • 要使用的协议。可能的选择:httphttpshttp是默认值。

数据库连接字符串测试在默认ClickHouse安装中:

'clickhouse://default:@localhost/test'

当您使用nginx作为clickhouse服务器连接字符串的代理服务器时,可能看起来像:

'clickhouse://user:password@example.com:8124/test?protocol=https'

其中8124是代理端口。

本地

请注意,本机连接未加密所有数据包括 用户/密码以纯文本传输你应该使用这个连接 通过不受信任的网络进行通信时使用ssh或vpn(例如)。

数据库连接字符串测试在默认ClickHouse安装中:

'clickhouse+native://default:@localhost/test'

所有连接字符串参数被代理到 CLIKHOOD驱动程序。 看这是parameters

功能

SQLAlchemy声明性支持

声明式和构造函数式表都支持:

fromsqlalchemyimportcreate_engine,Column,MetaData,literalfromclickhouse_sqlalchemyimportTable,make_session,get_declarative_base,types,enginesuri='clickhouse://default:@localhost/test'engine=create_engine(uri)session=make_session(engine)metadata=MetaData(bind=engine)Base=get_declarative_base(metadata=metadata)classRate(Base):day=Column(types.Date,primary_key=True)value=Column(types.Int32)__table_args__=(engines.Memory(),)another_table=Table('another_rate',metadata,Column('day',types.Date,primary_key=True),Column('value',types.Int32,server_default=literal(1)),engines.Memory())

以声明方式创建的表具有小写字母,其中的单词由下划线命名约定分隔。 但是可以通过sqlalchemy__tablename__属性轻松设置自己的属性。

基本DDL支持

您可以发出简单的ddl。示例CREATE/DROP表:

table=Rate.__table__table.create()another_table.create()another_table.drop()table.drop()

基本插入子句支持

简单的批量插入:

fromdatetimeimportdate,timedeltafromsqlalchemyimportfunctoday=date.today()rates=[{'day':today-timedelta(i),'value':200-i}foriinrange(100)]# Emits single INSERT statement.session.execute(table.insert(),rates)

公共sqlalchemy查询方法链接

支持order_byfilterlimitoffset等:

session.query(func.count(Rate.day)) \
    .filter(Rate.day>today-timedelta(20)) \
    .scalar()session.query(Rate.value) \
    .order_by(Rate.day.desc()) \
    .first()session.query(Rate.value) \
    .order_by(Rate.day) \
    .limit(10) \
    .all()session.query(func.sum(Rate.value)) \
    .scalar()

高级插入子句支持

从选择语句插入:

fromsqlalchemyimportcast# Labels must be present.select_query=session.query(Rate.day.label('day'),cast(Rate.value*1.5,types.Int32).label('value')).subquery()# Emits single INSERT FROM SELECT statementsession.execute(another_table.insert().from_select(['day','value'],select_query))

许多但不是所有的sqlalchemy特性都是现成的。

全部并集示例:

fromsqlalchemyimportunion_allselect_rate=session.query(Rate.day.label('date'),Rate.value.label('x'))select_another_rate=session.query(another_table.c.day.label('date'),another_table.c.value.label('x'))union_all(select_rate,select_another_rate).execute().fetchone()

用于查询处理的外部数据

当前可以与本机接口一起使用。

ext=Table('ext',metadata,Column('x',types.Int32),clickhouse_data=[(101,),(103,),(105,)],extend_existing=True)rv=session.query(Rate) \
    .filter(Rate.value.in_(session.query(ext.c.x))) \
    .execution_options(external_tables=[ext]) \
    .all()print(rv)

支持clickhouse特定的sql

  • SELECT查询:
    • WITH TOTALS
    • SAMPLE
    • lambda函数:x -> expr
    • JOIN

有关示例,请参见tests

覆盖默认查询设置

设置较低的查询优先级并限制执行请求的最大线程数。

rv=session.query(func.sum(Rate.value)) \
    .execution_options(settings={'max_threads':2,'priority':10}) \
    .scalar()print(rv)

运行测试

mkvirtualenv testenv && python setup.py test

pip将自动安装测试所需的所有模块。

许可证

clickhouse sqlalchemy分布在MIT license下。

如何贡献

  1. 检查打开的问题或打开一个新的问题,开始围绕功能想法或错误的讨论。
  2. 在github上分叉the repository,开始对master分支(或其分支)进行更改。
  3. 编写一个测试,显示bug已经修复或者特性wo如预期
  4. 发送一个pull请求并对维护程序进行bug操作,直到它被合并并发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用(BluetoothGattCharacteristic)特性中的数据创建、写入和保存csv文件。getValue()   java如何使用groupBy创建一个值为BigDecimal字段平均值的映射?   日期时间Java将iso_即时格式的字符串转换为日期   java如何检索和显示Android firebase的配置文件?   scala AWSJAVASDK:解压缩大小必须小于262144000字节   要应用于列表的java JSTL if条件   java在3个点之间画一个正方形   Kotlin java抽象类IllegaAccessError   java原语双值相等取决于大小?   java有没有一种方法可以对数据集使用compareTo()方法,而不必遍历数据集的每个元素?   java为什么我发送的每个UDP消息都会改变端口源?   重新选择文件时swing Java JTree冻结   java不知道我的游戏是怎么回事   Motif L&F中自定义组合框渲染器中的Java Swing消失文本   java Trade Me API访问前的OAuth