Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
205 commits
Select commit Hold shift + click to select a range
3cb1c32
start 3.0 beta branch
rekby Jan 18, 2023
7a2ece5
Release:
Jan 19, 2023
f9c5d13
typos
rekby Jan 19, 2023
3854f04
initial topic writer
rekby Jan 20, 2023
d2534c9
fix imports
rekby Jan 24, 2023
b4f2f23
black format
rekby Jan 24, 2023
b3c4bb5
fix flake 8 linter
rekby Jan 24, 2023
96a749b
black once yet
rekby Jan 24, 2023
2bee743
fix anext for python 3.8
rekby Jan 24, 2023
93b0318
Merge pull request #110 initial topic writer
rekby Jan 24, 2023
4bf0e15
Update CHANGELOG.md
rekby Jan 24, 2023
24651e3
Release: 3.0.1b2
Jan 24, 2023
295fc6c
move set cred env var from tox to fixture
rekby Jan 30, 2023
117ad24
Merge pull request #113 Fix tests
rekby Jan 31, 2023
9578c40
sync
rekby Jan 24, 2023
28e87f5
sync
rekby Jan 30, 2023
994eef3
use anonymous credentials by default
rekby Jan 31, 2023
eba948e
Merge pull request #115 start topic integration tests
rekby Jan 31, 2023
639e8b1
Merge branch 'main' into merge-from-main
rekby Feb 6, 2023
36dd075
Merge pull request #120 sync from main
rekby Feb 6, 2023
7769f5d
fix check retriable for idempotent error
rekby Feb 6, 2023
503e08a
Merge pull request #123 Fix check retriable error
rekby Feb 6, 2023
6b63bcf
Release: 3.0.1b3
Feb 6, 2023
8482833
simple init stream reader
rekby Jan 31, 2023
353a857
start/stop partitions
rekby Feb 1, 2023
5faa304
start implement read messages
rekby Feb 1, 2023
132aa1e
read messages to internal buffer
rekby Feb 3, 2023
86d2877
receive_batch_nowait
rekby Feb 3, 2023
2c68fed
switch from mutex to state_changed event
rekby Feb 3, 2023
7ac9adc
sync
rekby Feb 3, 2023
9cd5695
sync
rekby Feb 3, 2023
89ebf8d
fix type order
rekby Feb 3, 2023
dfe7620
read message from real servre
rekby Feb 3, 2023
cae886a
sync
rekby Feb 6, 2023
8a0bda1
handle grpc errors and errors in server status
rekby Feb 6, 2023
0cff446
sync
rekby Feb 6, 2023
dde12db
fix beta release
rekby Feb 6, 2023
01dd5bf
sync
rekby Feb 7, 2023
538d6c7
sync with declared public api
rekby Feb 7, 2023
62b8033
create topic reader from topic client
rekby Feb 7, 2023
abac878
fix linter
rekby Feb 7, 2023
12dd38e
Merge pull request #124 First iteration of topic reader
rekby Feb 7, 2023
779fe85
Release: 3.0.1b4
Feb 7, 2023
9960511
move topic grpc wrapper code to one file
rekby Feb 8, 2023
5a107cc
Merge pull request #149 move topic grpc wrapper code to one file
rekby Feb 8, 2023
dbc22a1
add topic control plane async
rekby Feb 8, 2023
16f347c
add sync client
rekby Feb 13, 2023
6611c29
linters
rekby Feb 13, 2023
76f8b70
fix usage internal codec
rekby Feb 13, 2023
25bd6bb
style
rekby Feb 13, 2023
889d147
Merge pull request #150 Topic control plane
rekby Feb 13, 2023
1e74b11
simplify topic writer
rekby Feb 14, 2023
1b95a97
fix wait_init for raise exception better.
rekby Feb 15, 2023
a4146ff
fix closed for internal writer
rekby Feb 15, 2023
bece3a7
Merge pull request #151 Simplify writer
rekby Feb 15, 2023
44edc47
raise exception on first close if writer was stopped by error before …
rekby Feb 15, 2023
77d48a3
Merge pull request #153 fix raise exception for close after error
rekby Feb 15, 2023
304d491
remove unused code
rekby Feb 15, 2023
342d5be
fix passing set to execute params
Feb 6, 2023
6e641eb
Bump cryptography from 3.4.7 to 39.0.1
dependabot[bot] Feb 8, 2023
fe58bdf
Bump cryptography in /examples/reservations-bot-demo/cloud_function
dependabot[bot] Feb 8, 2023
84ad0e2
ydb sqlalchemy experiment
Jan 20, 2023
a3f2e3e
Merge pull request #155 Remove unused writer funcs
rekby Feb 15, 2023
2951bb7
Merge branch 'v3' into _sqlalchemy_experiments
Valeria1235 Feb 16, 2023
66cfce0
Merge pull request #152 from ydb-platform/_sqlalchemy_experiments
Valeria1235 Feb 16, 2023
9a64e79
stop old tests if new commit pushed to same branch
rekby Feb 21, 2023
e683c57
Merge pull request #168 stop old tests if new commit pushed to same b…
rekby Feb 21, 2023
1df4618
topic writer add flush
Feb 20, 2023
c8db459
Merge pull request #164 from ydb-platform/topic-writer-flush
Valeria1235 Feb 21, 2023
7703dda
Fix flaky fail unit test from cause in integration tests (#169) separ…
rekby Feb 22, 2023
143d7ce
fix grpc import workaround template
rekby Feb 27, 2023
6307e59
Merge pull request #174 fix grpc import workaround template
rekby Feb 27, 2023
6f0b65a
topic-writer: fix default flush on close parameter, renaming
Feb 22, 2023
190dd9f
close grpc streams when stream reader/writer closed
rekby Feb 27, 2023
9da0026
add stop marker
rekby Feb 27, 2023
896a677
Merge pull request #175 close grpc streams when stream reader/writer …
rekby Feb 27, 2023
4db696c
Merge branch 'v3' into topic-writer-flush-on-close
Valeria1235 Feb 27, 2023
d4864cd
Merge pull request #170 from ydb-platform/topic-writer-flush-on-close
Valeria1235 Feb 27, 2023
c0f6f7b
fix timeout for sync call
rekby Feb 27, 2023
290feec
Merge pull request #177 test sync topic writer, fix timeout param
rekby Feb 28, 2023
5166d36
use anonymous credentials by default
rekby Jan 31, 2023
0d57d0a
use common auth algorithm by default
rekby Feb 22, 2023
18a7636
fix linter
rekby Feb 22, 2023
79bcf7a
Merge pull request #114 Use common determine auth method algorithm
rekby Feb 28, 2023
36d26a4
requirements to setup.py from requirements.txt
rekby Feb 28, 2023
71da358
Merge pull request #181 Fix setup.py and requirements
rekby Feb 28, 2023
37e930f
remove six package
rekby Feb 28, 2023
b03f958
changelog
rekby Feb 28, 2023
67dc0dd
add sync reader
rekby Feb 22, 2023
2249c6f
typo
rekby Feb 28, 2023
d1d0d23
Merge pull request #178 from Sync topic reader
rekby Feb 28, 2023
218f99a
Merge branch 'v3' into v3-remove-six
rekby Feb 28, 2023
c8fc34b
small fixes
rekby Mar 1, 2023
a7b48fb
Merge pull request #182 remove six
rekby Mar 1, 2023
99a4fae
Release: 3.0.1b5
Mar 1, 2023
2821186
Removed tornado support
rekby Mar 2, 2023
0385ad9
Merge pull request #184 Removed tornado support
rekby Mar 2, 2023
fc7ea86
public method renames
rekby Mar 2, 2023
4fba443
Merge pull request #186 public method renames for topic client
rekby Mar 2, 2023
cbfb86a
rename producer_and_message_group_id to producer_id and make it optional
rekby Mar 2, 2023
3c131d0
Merge pull request #187 rename producer_and_message_group_id to produ…
rekby Mar 2, 2023
d41b6f4
add commit for reader
rekby Feb 15, 2023
af833ff
remove logic for reorder commits
rekby Mar 1, 2023
d13d85d
fix style
rekby Mar 1, 2023
9e0e44d
fix typos
rekby Mar 2, 2023
9b746fc
typo while check reconnector_id and style
rekby Mar 2, 2023
37e117c
style
rekby Mar 2, 2023
41b3356
style
rekby Mar 3, 2023
2334f35
typo
rekby Mar 3, 2023
0d71887
Merge pull request #154 Reader topic commit
rekby Mar 3, 2023
6c2ff6a
change gitignore
rekby Mar 5, 2023
a669ec4
Merge pull request #193 change gitignore
rekby Mar 5, 2023
19a2f44
install ydb sources as editable requirements for tests
rekby Mar 5, 2023
d42d7c1
Merge pull request #196 install local ydb sources as editable package…
rekby Mar 5, 2023
e1ea1f4
remove difficult variants of send message
rekby Mar 5, 2023
be267ce
changelog
rekby Mar 5, 2023
48d1b36
fix linter
rekby Mar 5, 2023
d7bffd8
remove unsupported args in sync writer
rekby Mar 5, 2023
b9a9a4b
fix examples
rekby Mar 5, 2023
0d24cb9
Merge pull request #197 remove difficult variants of send message
rekby Mar 6, 2023
c125576
Release: 3.0.1b6
Mar 6, 2023
3902748
implement writer codecs
rekby Mar 6, 2023
1104d9d
add custom encoders
rekby Mar 7, 2023
a537c65
add comment
rekby Mar 7, 2023
51c9bd3
add sync tx tests
rekby Mar 7, 2023
8e00a22
Merge pull request #199 add sync tx test
rekby Mar 7, 2023
b0a17e1
Deny split transactions by default
rekby Mar 7, 2023
7bcee51
fix commit/rollback markers
rekby Mar 7, 2023
3545a78
Merge pull request #201 Deny split transactions by default (v3)
rekby Mar 7, 2023
a123228
truncated response raise exception by default
rekby Mar 7, 2023
a66f0d0
fix style
rekby Mar 7, 2023
ccc6eec
rename messagetype
rekby Mar 7, 2023
95ab809
Merge pull request #203 error on truncated result by default
rekby Mar 7, 2023
b31efcb
Merge pull request #198 Codec support for writer
rekby Mar 7, 2023
253f454
remove magic of old package renaming
rekby Mar 10, 2023
d522cb4
add special compatible with arcadia
rekby Mar 10, 2023
8175140
linter
rekby Mar 10, 2023
b67866b
Merge pull request #207 remove magic of old package renaming, compati…
rekby Mar 10, 2023
3c3b688
Release: 3.0.1b7
Mar 10, 2023
1f8b190
Update CHANGELOG.md
rekby Mar 10, 2023
c729d58
topic writer: update auth token loop
Mar 9, 2023
b4a5006
fix leak tasks
rekby Mar 10, 2023
8a32f24
fix check truncated setting with None table_client_settings
rekby Mar 14, 2023
ded6cbf
Merge pull request #209 V3 fix truncated response
rekby Mar 14, 2023
5f1335d
Release: 3.0.1b8
Mar 14, 2023
02889a6
change internal deny split to positive allow split (with false by def…
rekby Mar 14, 2023
1e623b3
add warnings
rekby Mar 14, 2023
592bb44
topic writer: add tests
Mar 13, 2023
39615f6
fix args in tests
rekby Mar 14, 2023
b145898
Merge pull request #211 v3 global settings
rekby Mar 14, 2023
0b3dc06
Update CHANGELOG.md
rekby Mar 14, 2023
047bc1a
Merge pull request #206 from ydb-platform/topic-writer-refresh-token
Valeria1235 Mar 15, 2023
584e393
add support reader codecs (#214)
rekby Mar 15, 2023
b3cd3b9
topic writer: add tests
Mar 13, 2023
805d91f
topic-reader: update auth-token loop
Mar 13, 2023
618f25c
better tests fot topic_writer/topic_reader
Mar 16, 2023
f7aceb1
Merge pull request #208 from ydb-platform/topic-reader-refresh-token
Valeria1235 Mar 16, 2023
6b7741d
Merge branch 'main' into v3-merge-with-main
rekby Mar 17, 2023
ed67c66
Merge pull request #224 merge main into v3
rekby Mar 17, 2023
350f92f
Update ydb_version.py
rekby Mar 17, 2023
0d48427
init read message
rekby Mar 18, 2023
d0d409f
implement calls from sync to async
rekby Mar 20, 2023
9d3e99d
rewrite reader to sync caller
rekby Mar 20, 2023
99e3ab9
fix typo
rekby Mar 20, 2023
387c17c
impl writer
rekby Mar 20, 2023
6e749ed
linter
rekby Mar 20, 2023
2931699
timeout style
rekby Mar 20, 2023
4ede48a
remove warning for good choise
rekby Mar 20, 2023
a718b5c
Merge branch 'v3-fix-sync-call-timeout' into v3-read-one-by-one
rekby Mar 20, 2023
6063277
merge
rekby Mar 20, 2023
a2cda76
read one message
rekby Mar 20, 2023
2eeb6d3
Merge pull request #228 V3 no warn on good global settings
rekby Mar 20, 2023
876d1f0
Merge branch 'main' into merge-main-into-v3
Mar 20, 2023
2ef0026
style fix
rekby Mar 20, 2023
cda5dad
Merge pull request #227 V3 fix sync call timeout
rekby Mar 20, 2023
5656a77
Merge pull request #230 Merge main into v3
rekby Mar 20, 2023
8aae450
Update CHANGELOG.md
rekby Mar 20, 2023
b56b119
Release: 3.0.1b9
Mar 20, 2023
dc90176
fix sqlalchemy nullable
Mar 20, 2023
8aee8e1
style fix
rekby Mar 20, 2023
c73d9f6
style fix
rekby Mar 21, 2023
8c10924
fix typo
rekby Mar 21, 2023
dd65645
Merge pull request #233 fix unused optional
rekby Mar 21, 2023
8149282
Merge pull request #232 from ydb-platform/fix-sqlalchemy-nullable
Valeria1235 Mar 21, 2023
4bf3ef8
Update requirements.txt
rekby Mar 21, 2023
cca8f47
Update CHANGELOG.md
rekby Mar 21, 2023
a90394b
Release: 3.0.1b10
Mar 21, 2023
88defe3
fix default truncated response
rekby Mar 21, 2023
9c8950b
Merge pull request #235 V3 fix global behavior
rekby Mar 21, 2023
3c8aaf0
Merge pull request #229 V3 read one by one
rekby Mar 21, 2023
3ebf21d
Update CHANGELOG.md
rekby Mar 21, 2023
677edfd
sync
rekby Mar 21, 2023
3b5db9f
sync
rekby Mar 21, 2023
336bc73
Merge pull request #237 V3 fix reader arg order
rekby Mar 21, 2023
fa3693a
Release: 3.0.1b11
Mar 21, 2023
1f94f7b
fix examples
rekby Mar 21, 2023
65fccc5
Merge pull request #238 fix topic examples
rekby Mar 21, 2023
cfe3ebe
Merge branch 'main' into v3-merge-main
rekby Mar 22, 2023
34dd869
Merge pull request #239 V3 merge main
rekby Mar 22, 2023
a490c27
clean public interface
rekby Mar 22, 2023
fb39f2d
add __all__ to topic module
rekby Mar 22, 2023
abb6876
fix linter
rekby Mar 22, 2023
918d1b2
Merge pull request #242 clear interface
rekby Mar 22, 2023
b4d102a
Update docker-compose-tls.yml
rekby Mar 22, 2023
12a4b71
Update docker-compose.yml
rekby Mar 22, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions .github/scripts/increment_version_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@
[
("0.0.0", 'patch', False, "0.0.1"),
("0.0.1", 'patch', False, "0.0.2"),
("0.0.1a1", 'patch', False, "0.0.1"),
("0.0.0", 'patch', True, "0.0.1a1"),
("0.0.1", 'patch', True, "0.0.2a1"),
("0.0.2a1", 'patch', True, "0.0.2a2"),
("0.0.1b1", 'patch', False, "0.0.1"),
("0.0.0", 'patch', True, "0.0.1b1"),
("0.0.1", 'patch', True, "0.0.2b1"),
("0.0.2b1", 'patch', True, "0.0.2b2"),
("0.0.1", 'minor', False, "0.1.0"),
("0.0.1a1", 'minor', False, "0.1.0"),
("0.1.0a1", 'minor', False, "0.1.0"),
("0.1.0", 'minor', True, "0.2.0a1"),
("0.1.0a1", 'minor', True, "0.1.0a2"),
("0.1.1a1", 'minor', True, "0.2.0a1"),
("0.0.1b1", 'minor', False, "0.1.0"),
("0.1.0b1", 'minor', False, "0.1.0"),
("0.1.0", 'minor', True, "0.2.0b1"),
("0.1.0b1", 'minor', True, "0.1.0b2"),
("0.1.1b1", 'minor', True, "0.2.0b1"),
("3.0.0b1", 'patch', True, "3.0.0b2"),
]
)
def test_increment_version(source, inc_type, with_beta, result):
Expand Down
17 changes: 13 additions & 4 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,33 @@ jobs:
runs-on: ubuntu-latest

concurrency:
group: unit-${{ github.ref }}-${{ matrix.environment }}-${{ matrix.python-version }}
group: unit-${{ github.ref }}-${{ matrix.environment }}-${{ matrix.python-version }}-${{ matrix.folder }}
cancel-in-progress: true

strategy:
fail-fast: false
max-parallel: 4
matrix:
python-version: [3.8]
environment: [py, py-tls, py-proto3, py-tls-proto3]
folder: [ydb, tests]
exclude:
- environment: py-tls
folder: ydb
- environment: py-tls-proto3
folder: ydb

steps:
- uses: actions/checkout@v1
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies

- name: Install tox
run: |
python -m pip install --upgrade pip
pip install tox==4.2.6
- name: Test with tox
run: tox -e ${{ matrix.environment }}

- name: Run unit tests
run: tox -e ${{ matrix.environment }} -- ${{ matrix.folder }}
3 changes: 2 additions & 1 deletion AUTHORS
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
The following authors have created the source code of "YDB Python SDK"
The following authors have created the source code of "Yandex Database Python SDK"
published and distributed by YANDEX LLC as the owner:

Vitalii Gridnev <gridnevvvit@gmail.com>
Timofey Koolin <timofey.koolin@gmail.com>
51 changes: 51 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,54 @@
## 3.0.1b11 ##
* Fixed global_allow_split_transactions
* Added reader.receive_message() method
* Swap topic_path and consumer arguments in topic_client.reader method

## 3.0.1b10 ##
* fixed sqlalchemy get_columns method with not null columns
* fixed requirements.txt

## 3.0.1b9 ##
* Add function for global revert broken behaviour: ydb.global_allow_truncated_result, ydb.global_allow_split_transactions
* Change argument names from deny_split_transactions to allow_split_transactions (with reverse value
* Fixed check retriable for idempotent error
* Reader codecs
* Read one message
* fixed sqlalchemy get_columns method with not null columns

## 3.0.1b8 ##
* Fixed exception while create ResultSet with None table_settings

## 3.0.1b7 ##
* BROKEN CHANGE: deny any action in transaction after commit/rollback
* BROKEN CHANGE: raise exception for truncated response by default
* Compatible protobaf detection for arcadia
* Add codecs support for topic writer

## 3.0.1b6 ##
* BROKEN CHANGES: remove writer.write(mess1, mess2) variant, use list instead: writer.write([mess1, mess2])
* BROKEN CHANGES: change names of public method in topic client
* BROKEN CHANGES: rename parameter producer_and_message_group_id to producer_id
* producer_id is optional now

## 3.0.1b5 ##
* Remove six package from code and dependencies (remove support python2)
* Use anonymous credentials by default instead of iam metadata (use ydb.driver.credentials_from_env_variables for creds by env var)
* Close grpc streams while closing readers/writers
* Add control plane operations for topic api: create, drop
* Add six package to requirements

## 3.0.1b4 ##
* Initial implementation of topic reader

## 3.0.1b3 ##
* Fix error of check retriable error for idempotent operations (error exist since 2.12.1)

## 3.0.1b2 ##
* Add initial topic writer

## 3.0.1b1 ##
* start 3.0 beta branch

## 2.13.4 ##
* fixed sqlalchemy get_columns method with not null columns

Expand Down
2 changes: 1 addition & 1 deletion docker-compose-tls.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
version: "3.9"
services:
ydb:
image: cr.yandex/yc/yandex-docker-local-ydb:latest
image: cr.yandex/yc/yandex-docker-local-ydb@sha256:b569c23d6854564ec4d970bda86cddcf5b11c7c6362df62beb8ba8eafb8d54fd
restart: always
ports:
- 2136:2136
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
version: "3.9"
services:
ydb:
image: cr.yandex/yc/yandex-docker-local-ydb:latest
image: cr.yandex/yc/yandex-docker-local-ydb@sha256:b569c23d6854564ec4d970bda86cddcf5b11c7c6362df62beb8ba8eafb8d54fd
restart: always
ports:
- 2136:2136
Expand Down
229 changes: 229 additions & 0 deletions examples/_sqlalchemy_example/example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
import datetime
import logging
import argparse
import sqlalchemy as sa
from sqlalchemy import orm, exc, sql
from sqlalchemy import Table, Column, Integer, String, Float, TIMESTAMP
from ydb._sqlalchemy import register_dialect

from fill_tables import fill_all_tables, to_days
from models import Base, Series, Episodes


def describe_table(engine, name):
inspect = sa.inspect(engine)
print(f"describe table {name}:")
for col in inspect.get_columns(name):
print(f"\t{col['name']}: {col['type']}")


def simple_select(conn):
stm = sa.select(Series).where(Series.series_id == 1)
res = conn.execute(stm)
print(res.one())


def simple_insert(conn):
stm = Episodes.__table__.insert().values(
series_id=3, season_id=6, episode_id=1, title="TBD"
)
conn.execute(stm)


def test_types(conn):
types_tb = Table(
"test_types",
Base.metadata,
Column("id", Integer, primary_key=True),
Column("str", String),
Column("num", Float),
Column("dt", TIMESTAMP),
)
types_tb.drop(bind=conn.engine, checkfirst=True)
types_tb.create(bind=conn.engine, checkfirst=True)

stm = types_tb.insert().values(
id=1,
str=b"Hello World!",
num=3.1415,
dt=datetime.datetime.now(),
)
conn.execute(stm)

# GROUP BY
stm = sa.select(types_tb.c.str, sa.func.max(types_tb.c.num)).group_by(
types_tb.c.str
)
rs = conn.execute(stm)
for x in rs:
print(x)


def run_example_orm(engine):
Base.metadata.bind = engine
Base.metadata.drop_all()
Base.metadata.create_all()

session = orm.sessionmaker(bind=engine)()

rs = session.query(Episodes).all()
for e in rs:
print(f"{e.episode_id}: {e.title}")

fill_all_tables(session.connection())

try:
session.add_all(
[
Episodes(
series_id=2,
season_id=1,
episode_id=1,
title="Minimum Viable Product",
air_date=to_days("2014-04-06"),
),
Episodes(
series_id=2,
season_id=1,
episode_id=2,
title="The Cap Table",
air_date=to_days("2014-04-13"),
),
Episodes(
series_id=2,
season_id=1,
episode_id=3,
title="Articles of Incorporation",
air_date=to_days("2014-04-20"),
),
Episodes(
series_id=2,
season_id=1,
episode_id=4,
title="Fiduciary Duties",
air_date=to_days("2014-04-27"),
),
Episodes(
series_id=2,
season_id=1,
episode_id=5,
title="Signaling Risk",
air_date=to_days("2014-05-04"),
),
]
)
session.commit()
except exc.DatabaseError:
print("Episodes already added!")
session.rollback()

rs = session.query(Episodes).all()
for e in rs:
print(f"{e.episode_id}: {e.title}")

rs = session.query(Episodes).filter(Episodes.title == "abc??").all()
for e in rs:
print(e.title)

print("Episodes count:", session.query(Episodes).count())

max_episode = session.query(sql.expression.func.max(Episodes.episode_id)).scalar()
print("Maximum episodes id:", max_episode)

session.add(
Episodes(
series_id=2,
season_id=1,
episode_id=max_episode + 1,
title="Signaling Risk",
air_date=to_days("2014-05-04"),
)
)

print("Episodes count:", session.query(Episodes).count())


def run_example_core(engine):
with engine.connect() as conn:
# raw sql
rs = conn.execute("SELECT 1 AS value")
print(rs.fetchone()["value"])

fill_all_tables(conn)

for t in "series seasons episodes".split():
describe_table(engine, t)

tb = sa.Table("episodes", sa.MetaData(engine), autoload=True)
stm = (
sa.select([tb.c.title])
.where(sa.and_(tb.c.series_id == 1, tb.c.season_id == 3))
.where(tb.c.title.like("%"))
.order_by(sa.asc(tb.c.title))
# TODO: limit isn't working now
# .limit(3)
)
rs = conn.execute(stm)
print(rs.fetchall())

simple_select(conn)

simple_insert(conn)

# simple join
stm = sa.select(
[Episodes.__table__.join(Series, Episodes.series_id == Series.series_id)]
).where(sa.and_(Series.series_id == 1, Episodes.season_id == 1))
rs = conn.execute(stm)
for row in rs:
print(f"{row.series_title}({row.episode_id}): {row.title}")

rs = conn.execute(sa.select(Episodes).where(Episodes.series_id == 3))
print(rs.fetchall())

# count
cnt = conn.execute(sa.func.count(Episodes.episode_id)).scalar()
print("Episodes cnt:", cnt)

# simple delete
conn.execute(sa.delete(Episodes).where(Episodes.title == "TBD"))
cnt = conn.execute(sa.func.count(Episodes.episode_id)).scalar()
print("Episodes cnt:", cnt)

test_types(conn)


def main():
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description="""\033[92mYandex.Database examples sqlalchemy usage.\x1b[0m\n""",
)
parser.add_argument(
"-d",
"--database",
help="Name of the database to use",
default="/local",
)
parser.add_argument(
"-e",
"--endpoint",
help="Endpoint url to use",
default="grpc://localhost:2136",
)

args = parser.parse_args()
register_dialect()
engine = sa.create_engine(
"yql:///ydb/",
connect_args={"database": args.database, "endpoint": args.endpoint},
)

logging.basicConfig(level=logging.INFO)
logging.getLogger("_sqlalchemy.engine").setLevel(logging.INFO)

run_example_core(engine)
# run_example_orm(engine)


if __name__ == "__main__":
main()
Loading