Apache Doris dialect for SQLAlchemy
Project description
Apache Doris Dialect for SQLAlchemy
This is a fork of sqlalchemy-doris project. Which is in turn - a fork of pydoris
This implementation fixes a bunch of issues with typing. And adds support for sqlalchemy ORM.
Features
- support SQLAlchemy 2.
- support pymysql and mysqlclient as driver.
- support SQLAlchemy table creation
- support for SQLALchemy ORM
- convenient DorisBase class for declaring ORM models
Installation
Use
pip install doris-alchemy[pymysql]
for pymysql.
Or
pip install doris-alchemy[mysqldb]
for mysqlclient.
Note doris-alchemy uses pymysql as default connector for compatibility. If both pymysql and mysqlclient are installed, mysqlclient is preferred.
Usage
from sqlalchemy import create_engine
engine = create_engine(f"doris+pymysql://{user}:{password}@{host}:{port}/{database}?charset=utf8mb4")
# or
engine = create_engine(f"doris+mysqldb://{user}:{password}@{host}:{port}/{database}?charset=utf8mb4")
Create Table (Imperative style)
import sqlalchemy as sa
from sqlalchemy import create_engine
from doris_alchemy import datatype
from doris_alchemy import HASH, RANGE
engine = create_engine(f"doris://{user}:{password}@{host}:{port}/{database}?charset=utf8mb4")
metadata_obj = sa.MetaData()
table = Table(
'dummy_table',
METADATA,
Column('id', Integer, primary_key=True),
Column('name', String(64), nullable=False),
Column('description', Text),
Column('date', DateTime),
doris_unique_key=('id'),
doris_partition_by=RANGE('id'),
doris_distributed_by=HASH('id'),
doris_properties={"replication_allocation": "tag.location.default: 1"},
)
table.create(engine)
SQL is
CREATE TABLE dummy_table (
id INTEGER NOT NULL,
name VARCHAR(64) NOT NULL,
description TEXT,
date DATETIME
)
UNIQUE KEY (`id`)
PARTITION BY RANGE(`id`) ()
DISTRIBUTED BY HASH(`id`) BUCKETS auto
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
)
Create Table (Declarative style / ORM)
from sqlalchemy import create_engine
from doris_alchemy import datatype, DorisBase
from doris_alchemy import HASH, RANGE
engine = create_engine(f"doris://{user}:{password}@{host}:{port}/{database}?charset=utf8mb4")
class Dummy(DorisBase):
__tablename__ = 'dummy_two'
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
name: Mapped[str] = mapped_column(String(127))
description: Mapped[str]
date: Mapped[datetime]
__table_args__ = {
'doris_properties': {"replication_allocation": "tag.location.default: 1"}
}
doris_unique_key = 'id'
doris_distributed_by = HASH('id')
doris_partition_by = RANGE('id')
DorisBase.metadata.create_all(engine)
SQL is
CREATE TABLE dummy_two (
id BIGINT NOT NULL,
name VARCHAR(127) NOT NULL,
description TEXT NOT NULL,
date DATETIME NOT NULL
)
UNIQUE KEY (`id`)
PARTITION BY RANGE(`id`) ()
DISTRIBUTED BY HASH(`id`) BUCKETS auto
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
)
Insertin and selecting
from sqlalchemy.orm import Session
from sqlalchemy import select, insert, create_engine
from datetime import datetime
engine = create_engine(f"doris+mysqldb://{USER}:{PWD}@{HOST}:{PORT}/{DB}")
row = {
'id': 0,
'name': 'Airbus',
'description': 'Construction bureau',
'date': datetime(2024, 2, 10)
}
with Session(engine) as s:
q = insert(Dummy).values([row])
s.execute(q)
sel = select(Dummy)
res = s.execute(sel)
print(list(res))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file doris_alchemy-0.2.13.tar.gz.
File metadata
- Download URL: doris_alchemy-0.2.13.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
740ce48e53a0531125d489dec082a3766c026457a6fa98628ffec3a32e3d8e9e
|
|
| MD5 |
3636853486b204879bc0975866a6c990
|
|
| BLAKE2b-256 |
a18a4032764402168ff75cab9ec7e3f09ca58f8420f482aa97b242d8a477a6b1
|
File details
Details for the file doris_alchemy-0.2.13-py3-none-any.whl.
File metadata
- Download URL: doris_alchemy-0.2.13-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9309d8c11db331b3c42d555a18eeb9ddee63396a7866a89bb98ac51c6a6787ed
|
|
| MD5 |
71067ed3316773b6898535611f345267
|
|
| BLAKE2b-256 |
499ec13318b0481ea562821e0a8a80776f5518ae39be164b31531bf74e48ea1c
|