Skip to content

Commit c5cdff8

Browse files
committed
Prepares for SQLAlchemy 2.0 support
1 parent baeaa04 commit c5cdff8

3 files changed

Lines changed: 20 additions & 10 deletions

File tree

HISTORY.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
Changelog
22
---------
33

4+
- Prepares for SQLAlchemy 2.0 support
5+
[Daverball]
6+
47
0.10.1 (21.01.2026)
58
~~~~~~~~~~~~~~~~~~~
69

src/libres/context/session.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from sqlalchemy import create_engine
3+
from sqlalchemy import create_engine, text
44
from sqlalchemy.pool import QueuePool
55
from sqlalchemy.orm import scoped_session, sessionmaker
66

@@ -34,12 +34,12 @@ def __init__(
3434

3535
self.engine = create_engine(
3636
dsn, poolclass=QueuePool, pool_size=5, max_overflow=5,
37-
isolation_level=SERIALIZABLE,
37+
isolation_level=SERIALIZABLE, future=True,
3838
**(engine_config or {})
3939
)
4040

4141
self.session = scoped_session(sessionmaker(
42-
bind=self.engine, **(session_config or {})
42+
bind=self.engine, future=True, **(session_config or {}),
4343
))
4444

4545
def stop_service(self) -> None:
@@ -58,20 +58,21 @@ def stop_service(self) -> None:
5858
def get_postgres_version(self, dsn: str) -> tuple[str, int]:
5959
""" Returns the postgres version as a tuple (string, integer).
6060
61-
Uses it's own connection to be independent from any session.
61+
Uses its own connection to be independent from any session.
6262
6363
"""
6464
assert 'postgres' in dsn, 'Not a postgres database'
6565

66-
query = """
66+
query = text("""
6767
SELECT current_setting('server_version'),
6868
current_setting('server_version_num')
69-
"""
69+
""")
7070

71-
engine = create_engine(dsn)
71+
engine = create_engine(dsn, future=True)
7272

7373
try:
74-
result = engine.execute(query).first()
74+
with engine.connect() as conn:
75+
result = conn.execute(query).first()
7576
assert result is not None
7677
version, number = result
7778
return version, int(number)

src/libres/db/models/base.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
from __future__ import annotations
22

3-
from sqlalchemy.ext import declarative
43

5-
ORMBase = declarative.declarative_base()
4+
from typing import TYPE_CHECKING
5+
if TYPE_CHECKING:
6+
from sqlalchemy.ext.declarative import declarative_base
7+
else:
8+
# FIXME: Move this import out when dropping 1.4 support
9+
from sqlalchemy.orm import declarative_base
10+
11+
ORMBase = declarative_base()

0 commit comments

Comments
 (0)