简单点击方言

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第三方库


热门话题
jsoup有效文件路径抛出java。木卫一。FileNotFoundException   java如何在不删除和添加Mapbox中的层的情况下更改SymbolLayer的Z值?   java计算用户定义年数内四个季度的降雨量   如何在Java中轻松地将格式为“20 0F 01”的字符串更改为十六进制值?   java在JPA或Hibernate中“持久类”和“实体”之间有什么区别?   java Android:AlarmManager“缺少对unregisterReceiver()的调用?”当按下后退按钮时   logcat中的java错误“isDataSchedulerEnabled():false”   java i/p col特性必须是字符串或数字类型,但不能是org。阿帕奇。火花利纳格小姐。向量   java如何从Post请求url和浏览器转储中隐藏密码   多线程javamail中的java问题   java我的用户应该直接连接到数据库吗?如何将用户连接到数据库;   java如何获得Spring数据JPA存储库工厂?   windows java字节数组转换为字符串,但不同的操作系统会产生不同的结果   java代码在eclipse中编译,但不在命令行上编译