Repository navigation
Relationship Attributes don't work to define relation between (new) Hero and (new) Team #373
Description
Activity
- addedquestionFurther information is requestedFurther information is requested
on Jul 2, 2022 This is probably related to #371, can you try downgrading the version of SQLAlchemy to 1.4.35 and see if that solves the issue?
Reacted by Dopetob1This is probably related to #371, can you try downgrading the version of SQLAlchemy to 1.4.35 and see if that solves the issue?
In my case I am using SQLAlchemy 1.4.32.
Upgrading to 1.4.32 doesnt help.edit:
Even going back to SQLAlchemy 1.4.29 (the latest version when tutorial001.py has been committed) doesn't help here.That is odd, for me it works on SQLAlchemy 1.4.35, as well as 1.4.32 and 1.4.29.
Could you run
python3 -m pip freezeand reply with the output? Also, delete any existingdatabase.dbfiles, execute the tutorial file withpython3 -Werror ./tutorial001.pytwo times in a row, and include the output in your reply?For reference here is the output I get:
`python3 -m pip freeze`
greenlet==1.1.2 pydantic==1.9.1 SQLAlchemy==1.4.35 sqlalchemy2-stubs==0.0.2a24 sqlmodel==0.0.6 typing_extensions==4.3.0First run
2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("team") 2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine [raw sql] () 2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine PRAGMA temp.table_info("team") 2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine [raw sql] () 2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("hero") 2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine [raw sql] () 2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine PRAGMA temp.table_info("hero") 2022-07-03 19:10:33,008 INFO sqlalchemy.engine.Engine [raw sql] () 2022-07-03 19:10:33,009 INFO sqlalchemy.engine.Engine CREATE TABLE team ( id INTEGER, name VARCHAR NOT NULL, headquarters VARCHAR NOT NULL, PRIMARY KEY (id) ) 2022-07-03 19:10:33,009 INFO sqlalchemy.engine.Engine [no key 0.00005s] () 2022-07-03 19:10:33,018 INFO sqlalchemy.engine.Engine CREATE INDEX ix_team_name ON team (name) 2022-07-03 19:10:33,018 INFO sqlalchemy.engine.Engine [no key 0.00010s] () 2022-07-03 19:10:33,022 INFO sqlalchemy.engine.Engine CREATE TABLE hero ( id INTEGER, name VARCHAR NOT NULL, secret_name VARCHAR NOT NULL, age INTEGER, team_id INTEGER, PRIMARY KEY (id), FOREIGN KEY(team_id) REFERENCES team (id) ) 2022-07-03 19:10:33,022 INFO sqlalchemy.engine.Engine [no key 0.00007s] () 2022-07-03 19:10:33,025 INFO sqlalchemy.engine.Engine CREATE INDEX ix_hero_age ON hero (age) 2022-07-03 19:10:33,025 INFO sqlalchemy.engine.Engine [no key 0.00006s] () 2022-07-03 19:10:33,028 INFO sqlalchemy.engine.Engine CREATE INDEX ix_hero_name ON hero (name) 2022-07-03 19:10:33,028 INFO sqlalchemy.engine.Engine [no key 0.00006s] () 2022-07-03 19:10:33,030 INFO sqlalchemy.engine.Engine COMMIT 2022-07-03 19:10:33,034 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2022-07-03 19:10:33,035 INFO sqlalchemy.engine.Engine INSERT INTO team (name, headquarters) VALUES (?, ?) 2022-07-03 19:10:33,035 INFO sqlalchemy.engine.Engine [generated in 0.00011s] ('Z-Force', 'Sister Margaret’s Bar') 2022-07-03 19:10:33,035 INFO sqlalchemy.engine.Engine INSERT INTO team (name, headquarters) VALUES (?, ?) 2022-07-03 19:10:33,035 INFO sqlalchemy.engine.Engine [cached since 0.0005196s ago] ('Preventers', 'Sharp Tower') 2022-07-03 19:10:33,036 INFO sqlalchemy.engine.Engine INSERT INTO hero (name, secret_name, age, team_id) VALUES (?, ?, ?, ?) 2022-07-03 19:10:33,036 INFO sqlalchemy.engine.Engine [generated in 0.00011s] ('Deadpond', 'Dive Wilson', None, 1) 2022-07-03 19:10:33,036 INFO sqlalchemy.engine.Engine INSERT INTO hero (name, secret_name, age, team_id) VALUES (?, ?, ?, ?) 2022-07-03 19:10:33,036 INFO sqlalchemy.engine.Engine [cached since 0.0002956s ago] ('Rusty-Man', 'Tommy Sharp', 48, 2) 2022-07-03 19:10:33,036 INFO sqlalchemy.engine.Engine INSERT INTO hero (name, secret_name, age, team_id) VALUES (?, ?, ?, ?) 2022-07-03 19:10:33,036 INFO sqlalchemy.engine.Engine [cached since 0.0003978s ago] ('Spider-Boy', 'Pedro Parqueador', None, None) 2022-07-03 19:10:33,037 INFO sqlalchemy.engine.Engine COMMIT 2022-07-03 19:10:33,039 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2022-07-03 19:10:33,040 INFO sqlalchemy.engine.Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id FROM hero WHERE hero.id = ? 2022-07-03 19:10:33,041 INFO sqlalchemy.engine.Engine [generated in 0.00009s] (1,) 2022-07-03 19:10:33,041 INFO sqlalchemy.engine.Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id FROM hero WHERE hero.id = ? 2022-07-03 19:10:33,041 INFO sqlalchemy.engine.Engine [cached since 0.0006923s ago] (2,) 2022-07-03 19:10:33,042 INFO sqlalchemy.engine.Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id FROM hero WHERE hero.id = ? 2022-07-03 19:10:33,042 INFO sqlalchemy.engine.Engine [cached since 0.001124s ago] (3,) Created hero: secret_name='Dive Wilson' name='Deadpond' team_id=1 id=1 age=None Created hero: secret_name='Tommy Sharp' name='Rusty-Man' team_id=2 id=2 age=48 Created hero: secret_name='Pedro Parqueador' name='Spider-Boy' team_id=None id=3 age=None 2022-07-03 19:10:33,043 INFO sqlalchemy.engine.Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters FROM team WHERE team.id = ? 2022-07-03 19:10:33,043 INFO sqlalchemy.engine.Engine [generated in 0.00009s] (2,) 2022-07-03 19:10:33,043 INFO sqlalchemy.engine.Engine UPDATE hero SET team_id=? WHERE hero.id = ? 2022-07-03 19:10:33,044 INFO sqlalchemy.engine.Engine [generated in 0.00007s] (2, 3) 2022-07-03 19:10:33,044 INFO sqlalchemy.engine.Engine COMMITSecond run
2022-07-03 19:10:40,277 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2022-07-03 19:10:40,277 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("team") 2022-07-03 19:10:40,277 INFO sqlalchemy.engine.Engine [raw sql] () 2022-07-03 19:10:40,278 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("hero") 2022-07-03 19:10:40,278 INFO sqlalchemy.engine.Engine [raw sql] () 2022-07-03 19:10:40,278 INFO sqlalchemy.engine.Engine COMMIT 2022-07-03 19:10:40,281 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2022-07-03 19:10:40,282 INFO sqlalchemy.engine.Engine INSERT INTO team (name, headquarters) VALUES (?, ?) 2022-07-03 19:10:40,282 INFO sqlalchemy.engine.Engine [generated in 0.00010s] ('Z-Force', 'Sister Margaret’s Bar') 2022-07-03 19:10:40,282 INFO sqlalchemy.engine.Engine INSERT INTO team (name, headquarters) VALUES (?, ?) 2022-07-03 19:10:40,282 INFO sqlalchemy.engine.Engine [cached since 0.000503s ago] ('Preventers', 'Sharp Tower') 2022-07-03 19:10:40,283 INFO sqlalchemy.engine.Engine INSERT INTO hero (name, secret_name, age, team_id) VALUES (?, ?, ?, ?) 2022-07-03 19:10:40,283 INFO sqlalchemy.engine.Engine [generated in 0.00008s] ('Deadpond', 'Dive Wilson', None, 3) 2022-07-03 19:10:40,283 INFO sqlalchemy.engine.Engine INSERT INTO hero (name, secret_name, age, team_id) VALUES (?, ?, ?, ?) 2022-07-03 19:10:40,283 INFO sqlalchemy.engine.Engine [cached since 0.00028s ago] ('Rusty-Man', 'Tommy Sharp', 48, 4) 2022-07-03 19:10:40,283 INFO sqlalchemy.engine.Engine INSERT INTO hero (name, secret_name, age, team_id) VALUES (?, ?, ?, ?) 2022-07-03 19:10:40,283 INFO sqlalchemy.engine.Engine [cached since 0.0003812s ago] ('Spider-Boy', 'Pedro Parqueador', None, None) 2022-07-03 19:10:40,283 INFO sqlalchemy.engine.Engine COMMIT 2022-07-03 19:10:40,292 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2022-07-03 19:10:40,293 INFO sqlalchemy.engine.Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id FROM hero WHERE hero.id = ? 2022-07-03 19:10:40,293 INFO sqlalchemy.engine.Engine [generated in 0.00010s] (4,) 2022-07-03 19:10:40,294 INFO sqlalchemy.engine.Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id FROM hero WHERE hero.id = ? 2022-07-03 19:10:40,294 INFO sqlalchemy.engine.Engine [cached since 0.0007627s ago] (5,) 2022-07-03 19:10:40,294 INFO sqlalchemy.engine.Engine SELECT hero.id, hero.name, hero.secret_name, hero.age, hero.team_id FROM hero WHERE hero.id = ? 2022-07-03 19:10:40,294 INFO sqlalchemy.engine.Engine [cached since 0.001091s ago] (6,) Created hero: secret_name='Dive Wilson' name='Deadpond' team_id=3 id=4 age=None Created hero: secret_name='Tommy Sharp' name='Rusty-Man' team_id=4 id=5 age=48 Created hero: secret_name='Pedro Parqueador' name='Spider-Boy' team_id=None id=6 age=None 2022-07-03 19:10:40,295 INFO sqlalchemy.engine.Engine SELECT team.id AS team_id, team.name AS team_name, team.headquarters AS team_headquarters FROM team WHERE team.id = ? 2022-07-03 19:10:40,295 INFO sqlalchemy.engine.Engine [generated in 0.00009s] (4,) 2022-07-03 19:10:40,296 INFO sqlalchemy.engine.Engine UPDATE hero SET team_id=? WHERE hero.id = ? 2022-07-03 19:10:40,296 INFO sqlalchemy.engine.Engine [generated in 0.00007s] (4, 6) 2022-07-03 19:10:40,296 INFO sqlalchemy.engine.Engine COMMITThat is odd, for me it works on SQLAlchemy 1.4.35, as well as 1.4.32 and 1.4.29.
Could you run
python3 -m pip freezeand reply with the output? Also, delete any existingdatabase.dbfiles, execute the tutorial file withpython3 -Werror ./tutorial001.pytwo times in a row, and include the output in your reply?For reference here is the output I get:
python3 -m pip freeze
First run
Second runYou are absolutely right. I was messing around in the wrong environment. I can confirm that everything works fine with SQLAlchemy==1.4.35.
Thank's allot for the hint!Reacted by Robert Rosca and Jie (Edward) Xu
First Check
Commit to Help
Example Code
Description
Follow the tutorial chapter: https://sqlmodel.tiangolo.com/tutorial/relationship-attributes/create-and-update-relationships/#create-instances-with-relationship-attributes
Operating System
Windows
Operating System Details
No response
SQLModel Version
0.0.6
Python Version
3.9.0
Additional Context
It is not possible to assign a new hero to a new team with relationship attributes (see https://sqlmodel.tiangolo.com/tutorial/relationship-attributes/create-and-update-relationships/#create-instances-with-relationship-attributes). The provided code (https://github.com/tiangolo/sqlmodel/blob/main/docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001.py) does not work as expected.