Skip to content

Commit 8ed856d

Browse files
tiangolofarahats9sbor23peterlandry
authored
✨ Upgrade SQLAlchemy to 2.0, including initial work by farahats9 (#700)
Co-authored-by: Mohamed Farahat <[email protected]> Co-authored-by: Stefan Borer <[email protected]> Co-authored-by: Peter Landry <[email protected]>
1 parent 77c6fed commit 8ed856d

File tree

24 files changed

+809
-511
lines changed

24 files changed

+809
-511
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ jobs:
5656
if: steps.cache.outputs.cache-hit != 'true'
5757
run: python -m poetry install
5858
- name: Lint
59+
# Do not run on Python 3.7 as mypy behaves differently
60+
if: matrix.python-version != '3.7'
5961
run: python -m poetry run bash scripts/lint.sh
6062
- run: mkdir coverage
6163
- name: Test

pyproject.toml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,8 @@ classifiers = [
3131

3232
[tool.poetry.dependencies]
3333
python = "^3.7"
34-
SQLAlchemy = ">=1.4.36,<2.0.0"
34+
SQLAlchemy = ">=2.0.0,<2.1.0"
3535
pydantic = "^1.9.0"
36-
sqlalchemy2-stubs = {version = "*", allow-prereleases = true}
3736

3837
[tool.poetry.group.dev.dependencies]
3938
pytest = "^7.0.1"
@@ -45,9 +44,10 @@ pillow = "^9.3.0"
4544
cairosvg = "^2.5.2"
4645
mdx-include = "^1.4.1"
4746
coverage = {extras = ["toml"], version = ">=6.2,<8.0"}
48-
fastapi = "^0.68.1"
49-
requests = "^2.26.0"
47+
fastapi = "^0.103.2"
5048
ruff = "^0.1.2"
49+
# For FastAPI tests
50+
httpx = "0.24.1"
5151

5252
[build-system]
5353
requires = ["poetry-core"]
@@ -80,6 +80,12 @@ strict = true
8080
module = "sqlmodel.sql.expression"
8181
warn_unused_ignores = false
8282

83+
[[tool.mypy.overrides]]
84+
module = "docs_src.*"
85+
disallow_incomplete_defs = false
86+
disallow_untyped_defs = false
87+
disallow_untyped_calls = false
88+
8389
[tool.ruff]
8490
select = [
8591
"E", # pycodestyle errors

scripts/generate_select.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ class Arg(BaseModel):
3434
arg = Arg(name=f"entity_{i}", annotation=t_var)
3535
ret_type = t_var
3636
else:
37-
t_type = f"_TModel_{i}"
38-
t_var = f"Type[{t_type}]"
39-
arg = Arg(name=f"entity_{i}", annotation=t_var)
37+
t_type = f"_T{i}"
38+
t_var = f"_TCCA[{t_type}]"
39+
arg = Arg(name=f"__ent{i}", annotation=t_var)
4040
ret_type = t_type
4141
args.append(arg)
4242
return_types.append(ret_type)

sqlmodel/__init__.py

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
__version__ = "0.0.11"
22

33
# Re-export from SQLAlchemy
4+
from sqlalchemy.engine import create_engine as create_engine
45
from sqlalchemy.engine import create_mock_engine as create_mock_engine
56
from sqlalchemy.engine import engine_from_config as engine_from_config
67
from sqlalchemy.inspection import inspect as inspect
8+
from sqlalchemy.pool import QueuePool as QueuePool
9+
from sqlalchemy.pool import StaticPool as StaticPool
710
from sqlalchemy.schema import BLANK_SCHEMA as BLANK_SCHEMA
811
from sqlalchemy.schema import DDL as DDL
912
from sqlalchemy.schema import CheckConstraint as CheckConstraint
@@ -21,7 +24,6 @@
2124
from sqlalchemy.schema import PrimaryKeyConstraint as PrimaryKeyConstraint
2225
from sqlalchemy.schema import Sequence as Sequence
2326
from sqlalchemy.schema import Table as Table
24-
from sqlalchemy.schema import ThreadLocalMetaData as ThreadLocalMetaData
2527
from sqlalchemy.schema import UniqueConstraint as UniqueConstraint
2628
from sqlalchemy.sql import LABEL_STYLE_DEFAULT as LABEL_STYLE_DEFAULT
2729
from sqlalchemy.sql import (
@@ -32,26 +34,14 @@
3234
LABEL_STYLE_TABLENAME_PLUS_COL as LABEL_STYLE_TABLENAME_PLUS_COL,
3335
)
3436
from sqlalchemy.sql import alias as alias
35-
from sqlalchemy.sql import all_ as all_
36-
from sqlalchemy.sql import and_ as and_
37-
from sqlalchemy.sql import any_ as any_
38-
from sqlalchemy.sql import asc as asc
39-
from sqlalchemy.sql import between as between
4037
from sqlalchemy.sql import bindparam as bindparam
41-
from sqlalchemy.sql import case as case
42-
from sqlalchemy.sql import cast as cast
43-
from sqlalchemy.sql import collate as collate
4438
from sqlalchemy.sql import column as column
4539
from sqlalchemy.sql import delete as delete
46-
from sqlalchemy.sql import desc as desc
47-
from sqlalchemy.sql import distinct as distinct
4840
from sqlalchemy.sql import except_ as except_
4941
from sqlalchemy.sql import except_all as except_all
5042
from sqlalchemy.sql import exists as exists
51-
from sqlalchemy.sql import extract as extract
5243
from sqlalchemy.sql import false as false
5344
from sqlalchemy.sql import func as func
54-
from sqlalchemy.sql import funcfilter as funcfilter
5545
from sqlalchemy.sql import insert as insert
5646
from sqlalchemy.sql import intersect as intersect
5747
from sqlalchemy.sql import intersect_all as intersect_all
@@ -61,28 +51,19 @@
6151
from sqlalchemy.sql import literal as literal
6252
from sqlalchemy.sql import literal_column as literal_column
6353
from sqlalchemy.sql import modifier as modifier
64-
from sqlalchemy.sql import not_ as not_
6554
from sqlalchemy.sql import null as null
66-
from sqlalchemy.sql import nulls_first as nulls_first
67-
from sqlalchemy.sql import nulls_last as nulls_last
6855
from sqlalchemy.sql import nullsfirst as nullsfirst
6956
from sqlalchemy.sql import nullslast as nullslast
70-
from sqlalchemy.sql import or_ as or_
7157
from sqlalchemy.sql import outerjoin as outerjoin
7258
from sqlalchemy.sql import outparam as outparam
73-
from sqlalchemy.sql import over as over
74-
from sqlalchemy.sql import subquery as subquery
7559
from sqlalchemy.sql import table as table
7660
from sqlalchemy.sql import tablesample as tablesample
7761
from sqlalchemy.sql import text as text
7862
from sqlalchemy.sql import true as true
79-
from sqlalchemy.sql import tuple_ as tuple_
80-
from sqlalchemy.sql import type_coerce as type_coerce
8163
from sqlalchemy.sql import union as union
8264
from sqlalchemy.sql import union_all as union_all
8365
from sqlalchemy.sql import update as update
8466
from sqlalchemy.sql import values as values
85-
from sqlalchemy.sql import within_group as within_group
8667
from sqlalchemy.types import ARRAY as ARRAY
8768
from sqlalchemy.types import BIGINT as BIGINT
8869
from sqlalchemy.types import BINARY as BINARY
@@ -93,6 +74,8 @@
9374
from sqlalchemy.types import DATE as DATE
9475
from sqlalchemy.types import DATETIME as DATETIME
9576
from sqlalchemy.types import DECIMAL as DECIMAL
77+
from sqlalchemy.types import DOUBLE as DOUBLE
78+
from sqlalchemy.types import DOUBLE_PRECISION as DOUBLE_PRECISION
9679
from sqlalchemy.types import FLOAT as FLOAT
9780
from sqlalchemy.types import INT as INT
9881
from sqlalchemy.types import INTEGER as INTEGER
@@ -105,12 +88,14 @@
10588
from sqlalchemy.types import TEXT as TEXT
10689
from sqlalchemy.types import TIME as TIME
10790
from sqlalchemy.types import TIMESTAMP as TIMESTAMP
91+
from sqlalchemy.types import UUID as UUID
10892
from sqlalchemy.types import VARBINARY as VARBINARY
10993
from sqlalchemy.types import VARCHAR as VARCHAR
11094
from sqlalchemy.types import BigInteger as BigInteger
11195
from sqlalchemy.types import Boolean as Boolean
11296
from sqlalchemy.types import Date as Date
11397
from sqlalchemy.types import DateTime as DateTime
98+
from sqlalchemy.types import Double as Double
11499
from sqlalchemy.types import Enum as Enum
115100
from sqlalchemy.types import Float as Float
116101
from sqlalchemy.types import Integer as Integer
@@ -122,16 +107,38 @@
122107
from sqlalchemy.types import String as String
123108
from sqlalchemy.types import Text as Text
124109
from sqlalchemy.types import Time as Time
110+
from sqlalchemy.types import TupleType as TupleType
125111
from sqlalchemy.types import TypeDecorator as TypeDecorator
126112
from sqlalchemy.types import Unicode as Unicode
127113
from sqlalchemy.types import UnicodeText as UnicodeText
114+
from sqlalchemy.types import Uuid as Uuid
128115

129116
# From SQLModel, modifications of SQLAlchemy or equivalents of Pydantic
130-
from .engine.create import create_engine as create_engine
131117
from .main import Field as Field
132118
from .main import Relationship as Relationship
133119
from .main import SQLModel as SQLModel
134120
from .orm.session import Session as Session
121+
from .sql.expression import all_ as all_
122+
from .sql.expression import and_ as and_
123+
from .sql.expression import any_ as any_
124+
from .sql.expression import asc as asc
125+
from .sql.expression import between as between
126+
from .sql.expression import case as case
127+
from .sql.expression import cast as cast
135128
from .sql.expression import col as col
129+
from .sql.expression import collate as collate
130+
from .sql.expression import desc as desc
131+
from .sql.expression import distinct as distinct
132+
from .sql.expression import extract as extract
133+
from .sql.expression import funcfilter as funcfilter
134+
from .sql.expression import not_ as not_
135+
from .sql.expression import nulls_first as nulls_first
136+
from .sql.expression import nulls_last as nulls_last
137+
from .sql.expression import or_ as or_
138+
from .sql.expression import over as over
136139
from .sql.expression import select as select
140+
from .sql.expression import tuple_ as tuple_
141+
from .sql.expression import type_coerce as type_coerce
142+
from .sql.expression import within_group as within_group
143+
from .sql.sqltypes import GUID as GUID
137144
from .sql.sqltypes import AutoString as AutoString

sqlmodel/engine/__init__.py

Whitespace-only changes.

sqlmodel/engine/create.py

Lines changed: 0 additions & 139 deletions
This file was deleted.

0 commit comments

Comments
 (0)