Skip to content

Commit d0ae3e8

Browse files
farahats9AntonDeMeester
authored andcommitted
migration to sqlalchemy 2.0
1 parent 77c6fed commit d0ae3e8

File tree

5 files changed

+36
-65
lines changed

5 files changed

+36
-65
lines changed

docs_src/tutorial/many_to_many/tutorial003.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,12 @@
33
from sqlmodel import Field, Relationship, Session, SQLModel, create_engine, select
44

55

6-
class HeroTeamLink(SQLModel, table=True):
7-
team_id: Optional[int] = Field(
8-
default=None, foreign_key="team.id", primary_key=True
9-
)
10-
hero_id: Optional[int] = Field(
11-
default=None, foreign_key="hero.id", primary_key=True
12-
)
13-
is_training: bool = False
14-
15-
team: "Team" = Relationship(back_populates="hero_links")
16-
hero: "Hero" = Relationship(back_populates="team_links")
17-
18-
196
class Team(SQLModel, table=True):
207
id: Optional[int] = Field(default=None, primary_key=True)
218
name: str = Field(index=True)
229
headquarters: str
2310

24-
hero_links: List[HeroTeamLink] = Relationship(back_populates="team")
11+
hero_links: List["HeroTeamLink"] = Relationship(back_populates="team")
2512

2613

2714
class Hero(SQLModel, table=True):
@@ -30,7 +17,20 @@ class Hero(SQLModel, table=True):
3017
secret_name: str
3118
age: Optional[int] = Field(default=None, index=True)
3219

33-
team_links: List[HeroTeamLink] = Relationship(back_populates="hero")
20+
team_links: List["HeroTeamLink"] = Relationship(back_populates="hero")
21+
22+
23+
class HeroTeamLink(SQLModel, table=True):
24+
team_id: Optional[int] = Field(
25+
default=None, foreign_key="team.id", primary_key=True
26+
)
27+
hero_id: Optional[int] = Field(
28+
default=None, foreign_key="hero.id", primary_key=True
29+
)
30+
is_training: bool = False
31+
32+
team: "Team" = Relationship(back_populates="hero_links")
33+
hero: "Hero" = Relationship(back_populates="team_links")
3434

3535

3636
sqlite_file_name = "database.db"

docs_src/tutorial/relationship_attributes/back_populates/tutorial003.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,21 @@
33
from sqlmodel import Field, Relationship, SQLModel, create_engine
44

55

6+
class Hero(SQLModel, table=True):
7+
id: Optional[int] = Field(default=None, primary_key=True)
8+
name: str = Field(index=True)
9+
secret_name: str
10+
age: Optional[int] = Field(default=None, index=True)
11+
12+
team_id: Optional[int] = Field(default=None, foreign_key="team.id")
13+
team: Optional["Team"] = Relationship(back_populates="heroes")
14+
15+
weapon_id: Optional[int] = Field(default=None, foreign_key="weapon.id")
16+
weapon: Optional["Weapon"] = Relationship(back_populates="hero")
17+
18+
powers: List["Power"] = Relationship(back_populates="hero")
19+
20+
621
class Weapon(SQLModel, table=True):
722
id: Optional[int] = Field(default=None, primary_key=True)
823
name: str = Field(index=True)
@@ -26,21 +41,6 @@ class Team(SQLModel, table=True):
2641
heroes: List["Hero"] = Relationship(back_populates="team")
2742

2843

29-
class Hero(SQLModel, table=True):
30-
id: Optional[int] = Field(default=None, primary_key=True)
31-
name: str = Field(index=True)
32-
secret_name: str
33-
age: Optional[int] = Field(default=None, index=True)
34-
35-
team_id: Optional[int] = Field(default=None, foreign_key="team.id")
36-
team: Optional[Team] = Relationship(back_populates="heroes")
37-
38-
weapon_id: Optional[int] = Field(default=None, foreign_key="weapon.id")
39-
weapon: Optional[Weapon] = Relationship(back_populates="hero")
40-
41-
powers: List[Power] = Relationship(back_populates="hero")
42-
43-
4444
sqlite_file_name = "database.db"
4545
sqlite_url = f"sqlite:///{sqlite_file_name}"
4646

sqlmodel/__init__.py

-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
from sqlalchemy.schema import PrimaryKeyConstraint as PrimaryKeyConstraint
2222
from sqlalchemy.schema import Sequence as Sequence
2323
from sqlalchemy.schema import Table as Table
24-
from sqlalchemy.schema import ThreadLocalMetaData as ThreadLocalMetaData
2524
from sqlalchemy.schema import UniqueConstraint as UniqueConstraint
2625
from sqlalchemy.sql import LABEL_STYLE_DEFAULT as LABEL_STYLE_DEFAULT
2726
from sqlalchemy.sql import (
@@ -71,7 +70,6 @@
7170
from sqlalchemy.sql import outerjoin as outerjoin
7271
from sqlalchemy.sql import outparam as outparam
7372
from sqlalchemy.sql import over as over
74-
from sqlalchemy.sql import subquery as subquery
7573
from sqlalchemy.sql import table as table
7674
from sqlalchemy.sql import tablesample as tablesample
7775
from sqlalchemy.sql import text as text

sqlmodel/main.py

+1
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,7 @@ class SQLModel(BaseModel, metaclass=SQLModelMetaclass, registry=default_registry
642642
__sqlmodel_relationships__: ClassVar[Dict[str, RelationshipProperty]] # type: ignore
643643
__name__: ClassVar[str]
644644
metadata: ClassVar[MetaData]
645+
__allow_unmapped__ = True # https://docs.sqlalchemy.org/en/20/changelog/migration_20.html#migration-20-step-six
645646

646647
class Config:
647648
orm_mode = True

sqlmodel/sql/expression.py

+5-33
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ class SelectOfScalar(_Select, Generic[_TSelect]):
117117

118118

119119
@overload
120-
def select(entity_0: _TScalar_0, **kw: Any) -> SelectOfScalar[_TScalar_0]: # type: ignore
120+
def select(entity_0: _TScalar_0) -> SelectOfScalar[_TScalar_0]: # type: ignore
121121
...
122122

123123

124124
@overload
125-
def select(entity_0: Type[_TModel_0], **kw: Any) -> SelectOfScalar[_TModel_0]: # type: ignore
125+
def select(entity_0: Type[_TModel_0]) -> SelectOfScalar[_TModel_0]: # type: ignore
126126
...
127127

128128

@@ -133,7 +133,6 @@ def select(entity_0: Type[_TModel_0], **kw: Any) -> SelectOfScalar[_TModel_0]:
133133
def select( # type: ignore
134134
entity_0: _TScalar_0,
135135
entity_1: _TScalar_1,
136-
**kw: Any,
137136
) -> Select[Tuple[_TScalar_0, _TScalar_1]]:
138137
...
139138

@@ -142,7 +141,6 @@ def select( # type: ignore
142141
def select( # type: ignore
143142
entity_0: _TScalar_0,
144143
entity_1: Type[_TModel_1],
145-
**kw: Any,
146144
) -> Select[Tuple[_TScalar_0, _TModel_1]]:
147145
...
148146

@@ -151,7 +149,6 @@ def select( # type: ignore
151149
def select( # type: ignore
152150
entity_0: Type[_TModel_0],
153151
entity_1: _TScalar_1,
154-
**kw: Any,
155152
) -> Select[Tuple[_TModel_0, _TScalar_1]]:
156153
...
157154

@@ -160,7 +157,6 @@ def select( # type: ignore
160157
def select( # type: ignore
161158
entity_0: Type[_TModel_0],
162159
entity_1: Type[_TModel_1],
163-
**kw: Any,
164160
) -> Select[Tuple[_TModel_0, _TModel_1]]:
165161
...
166162

@@ -170,7 +166,6 @@ def select( # type: ignore
170166
entity_0: _TScalar_0,
171167
entity_1: _TScalar_1,
172168
entity_2: _TScalar_2,
173-
**kw: Any,
174169
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TScalar_2]]:
175170
...
176171

@@ -180,7 +175,6 @@ def select( # type: ignore
180175
entity_0: _TScalar_0,
181176
entity_1: _TScalar_1,
182177
entity_2: Type[_TModel_2],
183-
**kw: Any,
184178
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TModel_2]]:
185179
...
186180

@@ -190,7 +184,6 @@ def select( # type: ignore
190184
entity_0: _TScalar_0,
191185
entity_1: Type[_TModel_1],
192186
entity_2: _TScalar_2,
193-
**kw: Any,
194187
) -> Select[Tuple[_TScalar_0, _TModel_1, _TScalar_2]]:
195188
...
196189

@@ -200,7 +193,6 @@ def select( # type: ignore
200193
entity_0: _TScalar_0,
201194
entity_1: Type[_TModel_1],
202195
entity_2: Type[_TModel_2],
203-
**kw: Any,
204196
) -> Select[Tuple[_TScalar_0, _TModel_1, _TModel_2]]:
205197
...
206198

@@ -210,7 +202,6 @@ def select( # type: ignore
210202
entity_0: Type[_TModel_0],
211203
entity_1: _TScalar_1,
212204
entity_2: _TScalar_2,
213-
**kw: Any,
214205
) -> Select[Tuple[_TModel_0, _TScalar_1, _TScalar_2]]:
215206
...
216207

@@ -220,7 +211,6 @@ def select( # type: ignore
220211
entity_0: Type[_TModel_0],
221212
entity_1: _TScalar_1,
222213
entity_2: Type[_TModel_2],
223-
**kw: Any,
224214
) -> Select[Tuple[_TModel_0, _TScalar_1, _TModel_2]]:
225215
...
226216

@@ -230,7 +220,6 @@ def select( # type: ignore
230220
entity_0: Type[_TModel_0],
231221
entity_1: Type[_TModel_1],
232222
entity_2: _TScalar_2,
233-
**kw: Any,
234223
) -> Select[Tuple[_TModel_0, _TModel_1, _TScalar_2]]:
235224
...
236225

@@ -240,7 +229,6 @@ def select( # type: ignore
240229
entity_0: Type[_TModel_0],
241230
entity_1: Type[_TModel_1],
242231
entity_2: Type[_TModel_2],
243-
**kw: Any,
244232
) -> Select[Tuple[_TModel_0, _TModel_1, _TModel_2]]:
245233
...
246234

@@ -251,7 +239,6 @@ def select( # type: ignore
251239
entity_1: _TScalar_1,
252240
entity_2: _TScalar_2,
253241
entity_3: _TScalar_3,
254-
**kw: Any,
255242
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TScalar_2, _TScalar_3]]:
256243
...
257244

@@ -262,7 +249,6 @@ def select( # type: ignore
262249
entity_1: _TScalar_1,
263250
entity_2: _TScalar_2,
264251
entity_3: Type[_TModel_3],
265-
**kw: Any,
266252
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TScalar_2, _TModel_3]]:
267253
...
268254

@@ -273,7 +259,6 @@ def select( # type: ignore
273259
entity_1: _TScalar_1,
274260
entity_2: Type[_TModel_2],
275261
entity_3: _TScalar_3,
276-
**kw: Any,
277262
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TModel_2, _TScalar_3]]:
278263
...
279264

@@ -284,7 +269,6 @@ def select( # type: ignore
284269
entity_1: _TScalar_1,
285270
entity_2: Type[_TModel_2],
286271
entity_3: Type[_TModel_3],
287-
**kw: Any,
288272
) -> Select[Tuple[_TScalar_0, _TScalar_1, _TModel_2, _TModel_3]]:
289273
...
290274

@@ -295,7 +279,6 @@ def select( # type: ignore
295279
entity_1: Type[_TModel_1],
296280
entity_2: _TScalar_2,
297281
entity_3: _TScalar_3,
298-
**kw: Any,
299282
) -> Select[Tuple[_TScalar_0, _TModel_1, _TScalar_2, _TScalar_3]]:
300283
...
301284

@@ -306,7 +289,6 @@ def select( # type: ignore
306289
entity_1: Type[_TModel_1],
307290
entity_2: _TScalar_2,
308291
entity_3: Type[_TModel_3],
309-
**kw: Any,
310292
) -> Select[Tuple[_TScalar_0, _TModel_1, _TScalar_2, _TModel_3]]:
311293
...
312294

@@ -317,7 +299,6 @@ def select( # type: ignore
317299
entity_1: Type[_TModel_1],
318300
entity_2: Type[_TModel_2],
319301
entity_3: _TScalar_3,
320-
**kw: Any,
321302
) -> Select[Tuple[_TScalar_0, _TModel_1, _TModel_2, _TScalar_3]]:
322303
...
323304

@@ -328,7 +309,6 @@ def select( # type: ignore
328309
entity_1: Type[_TModel_1],
329310
entity_2: Type[_TModel_2],
330311
entity_3: Type[_TModel_3],
331-
**kw: Any,
332312
) -> Select[Tuple[_TScalar_0, _TModel_1, _TModel_2, _TModel_3]]:
333313
...
334314

@@ -339,7 +319,6 @@ def select( # type: ignore
339319
entity_1: _TScalar_1,
340320
entity_2: _TScalar_2,
341321
entity_3: _TScalar_3,
342-
**kw: Any,
343322
) -> Select[Tuple[_TModel_0, _TScalar_1, _TScalar_2, _TScalar_3]]:
344323
...
345324

@@ -350,7 +329,6 @@ def select( # type: ignore
350329
entity_1: _TScalar_1,
351330
entity_2: _TScalar_2,
352331
entity_3: Type[_TModel_3],
353-
**kw: Any,
354332
) -> Select[Tuple[_TModel_0, _TScalar_1, _TScalar_2, _TModel_3]]:
355333
...
356334

@@ -361,7 +339,6 @@ def select( # type: ignore
361339
entity_1: _TScalar_1,
362340
entity_2: Type[_TModel_2],
363341
entity_3: _TScalar_3,
364-
**kw: Any,
365342
) -> Select[Tuple[_TModel_0, _TScalar_1, _TModel_2, _TScalar_3]]:
366343
...
367344

@@ -372,7 +349,6 @@ def select( # type: ignore
372349
entity_1: _TScalar_1,
373350
entity_2: Type[_TModel_2],
374351
entity_3: Type[_TModel_3],
375-
**kw: Any,
376352
) -> Select[Tuple[_TModel_0, _TScalar_1, _TModel_2, _TModel_3]]:
377353
...
378354

@@ -383,7 +359,6 @@ def select( # type: ignore
383359
entity_1: Type[_TModel_1],
384360
entity_2: _TScalar_2,
385361
entity_3: _TScalar_3,
386-
**kw: Any,
387362
) -> Select[Tuple[_TModel_0, _TModel_1, _TScalar_2, _TScalar_3]]:
388363
...
389364

@@ -394,7 +369,6 @@ def select( # type: ignore
394369
entity_1: Type[_TModel_1],
395370
entity_2: _TScalar_2,
396371
entity_3: Type[_TModel_3],
397-
**kw: Any,
398372
) -> Select[Tuple[_TModel_0, _TModel_1, _TScalar_2, _TModel_3]]:
399373
...
400374

@@ -405,7 +379,6 @@ def select( # type: ignore
405379
entity_1: Type[_TModel_1],
406380
entity_2: Type[_TModel_2],
407381
entity_3: _TScalar_3,
408-
**kw: Any,
409382
) -> Select[Tuple[_TModel_0, _TModel_1, _TModel_2, _TScalar_3]]:
410383
...
411384

@@ -416,18 +389,17 @@ def select( # type: ignore
416389
entity_1: Type[_TModel_1],
417390
entity_2: Type[_TModel_2],
418391
entity_3: Type[_TModel_3],
419-
**kw: Any,
420392
) -> Select[Tuple[_TModel_0, _TModel_1, _TModel_2, _TModel_3]]:
421393
...
422394

423395

424396
# Generated overloads end
425397

426398

427-
def select(*entities: Any, **kw: Any) -> Union[Select, SelectOfScalar]: # type: ignore
399+
def select(*entities: Any) -> Union[Select, SelectOfScalar]: # type: ignore
428400
if len(entities) == 1:
429-
return SelectOfScalar._create(*entities, **kw) # type: ignore
430-
return Select._create(*entities, **kw) # type: ignore
401+
return SelectOfScalar(*entities) # type: ignore
402+
return Select(*entities) # type: ignore
431403

432404

433405
# TODO: add several @overload from Python types to SQLAlchemy equivalents

0 commit comments

Comments
 (0)