【发布时间】:2022-08-16 16:13:08
【问题描述】:
我有这两个表名为User 和UserRole。
class UserRoleType(str, enum.Enum):
admin = \'admin\'
client = \'client\'
class UserRole(SQLModel, table=True):
__tablename__ = \'user_role\'
id: int | None = Field(default=None, primary_key=True)
type: UserRoleType = Field(
default=UserRoleType.client,
sa_column=Column(Enum(UserRoleType)),
)
write_access: bool = Field(default=False)
read_access: bool = Field(default=False)
users: List[\'User\'] = Relationship(back_populates=\'user_role\')
class User(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
username: str = Field(..., index=True)
user_role_id: int = Field(..., foreign_key=\'user_role.id\')
user_role: \'UserRole\' = Relationship(back_populates=\'users\')
我可以轻松地将它们插入数据库:
async with get_session() as session:
role = UserRole(description=UserRoleType.client)
session.add(role)
await session.commit()
user = User( username=\'test\', user_role_id=role.id)
session.add(user)
await session.commit()
await session.refresh(user)
并通过以下方式访问提交的数据:
results = await session.execute(select(User).where(User.id == 1)).one()
输出:
(User(user_role_id=1, username=\'test\', id=1),)
请注意,有一个user_role_id,但user_role 对象在哪里?事实上,如果我尝试访问它,它会引发:
*** AttributeError: Could not locate column in row for column \'user_role\'
我还尝试在插入User 时传递role 而不是user_role_id:
user = User( username=\'test\', user_role=role)
但我得到了:
sqlalchemy.exc.InterfaceError: (sqlite3.InterfaceError) Error binding parameter 2 - probably unsupported type.
-
您如何尝试访问
user_role?
标签: python sqlalchemy sqlmodel