提问人:KALAGA Serge Eric 提问时间:11/16/2023 更新时间:11/16/2023 访问量:37
sqlalchemy.exc.InvalidRequestError:创建数据类时遇到 Python 数据类错误:TypeError(“非默认参数)
sqlalchemy.exc.InvalidRequestError: Python dataclasses error encountered when creating dataclass : TypeError("non-default argument
问:
我正在使用 sqlalchemy 作为 orm 的 fastapi 项目: 我目前有这个错误:
sqlalchemy.exc.InvalidRequestError:为“User”创建数据类时遇到 Python 数据类错误:TypeError(“非默认参数'events' 跟随默认参数”)。有关其他信息,请参阅 Python 数据类文档。(此错误的背景见:https://sqlalche.me/e/20/dcte)
这是我的“models.py”文件
type python
from sqlalchemy import func, Integer, Boolean, DateTime, String, JSON, ForeignKey, Text
from sqlalchemy.orm import Mapped, mapped_column, MappedAsDataclass, DeclarativeBase, relationship
from api.database.basetemplate import BaseTemplate
from typing import Optional, List
from datetime import datetime
# from enum import Enum
class Base(MappedAsDataclass, DeclarativeBase):
pass
class User(Base, BaseTemplate):
__tablename__ = "user"
id:Mapped[int] = mapped_column(primary_key=True, init=False, index=True)
username:Mapped[str] = mapped_column(String(100), unique=True, index=True)
password:Mapped[str] = mapped_column(String(100), nullable=False)
image_url:Mapped[Optional[str]] = mapped_column(Text, nullable=True, default=None)
nom:Mapped[Optional[str]] = mapped_column(String(100), default=None)
prenom:Mapped[Optional[str]] = mapped_column(String(100), default=None)
telephone:Mapped[Optional[str]] = mapped_column(String(100), default=None)
is_admin:Mapped[Optional[bool]] = mapped_column(Boolean, default=False)
is_subscribed:Mapped[Optional[bool]] = mapped_column(Boolean, default=False)
date_subscription:Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True, default=None)
date_creation:Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True, server_default=func.now(), default=datetime.utcnow())
events: Mapped[List["Event"]] = relationship("Event", back_populates="user", cascade="all, delete-orphan")
class Event(Base, BaseTemplate):
__tablename__ = "event"
id:Mapped[int] = mapped_column(primary_key=True, init=False)
nom:Mapped[str] = mapped_column(String(255), nullable=False)
image_url:Mapped[Optional[str]] = mapped_column(Text, nullable=True, default=None)
description:Mapped[Optional[str]] = mapped_column(Text, nullable=True, default=None)
contacts:Mapped[Optional[str]] = mapped_column(String(255), nullable=True, default=None)
categorie_id:Mapped[Optional[str]] = mapped_column(ForeignKey("event_category.id"), nullable=True, default=None)
type_id:Mapped[Optional[str]] = mapped_column(ForeignKey("event_type.id"), nullable=True, default=None)
lieu:Mapped[Optional[str]] = mapped_column(String(255), nullable=True, default=None)
localisation:Mapped[Optional[str]] = mapped_column(String(255), nullable=True, default=None)
date_creation:Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), default=datetime.utcnow())
user_id:Mapped[int] = mapped_column(ForeignKey("user.id"), nullable=False)
user: Mapped["User"] = relationship("User", back_populates="events")
event_category: Mapped["EventCategory"] = relationship("EventCategory", back_populates="event_category")
event_type: Mapped["EventType"] = relationship("EventType", back_populates="event_type")
event_dates: Mapped[List["EventDates"]] = relationship("EventDates", back_populates="event", cascade="all, delete-orphan")
event_likes: Mapped[List["EventLikes"]] = relationship("EventLikes", back_populates="event", cascade="all, delete-orphan")
event_comments: Mapped[List["EventComments"]] = relationship("EventComments", back_populates="event", cascade="all, delete-orphan")
class EventLikes(Base, BaseTemplate):
__tablename__ = "event_likes"
id:Mapped[int] = mapped_column(primary_key=True, init=False)
user_id:Mapped[int] = mapped_column(ForeignKey("user.id"), nullable=False, default=None)
event_id:Mapped[int] = mapped_column(ForeignKey("event.id"), nullable=False)
user: Mapped["User"] = relationship("User", back_populates="event_likes")
event: Mapped["Event"] = relationship("Event", back_populates="event_likes")
class EventComments(Base, BaseTemplate):
__tablename__ = "event_comments"
id:Mapped[int] = mapped_column(primary_key=True, init=False)
commentaire:Mapped[str] = mapped_column(Text, nullable=False)
user_id:Mapped[int] = mapped_column(ForeignKey("user.id"), nullable=False)
event_id:Mapped[int] = mapped_column(ForeignKey("event.id"), nullable=False)
user: Mapped["User"] = relationship("User", back_populates="event_comments")
event: Mapped["Event"] = relationship("Event", back_populates="event_comments")
class EventDates(Base, BaseTemplate):
__tablename__ = "event_dates"
id:Mapped[int] = mapped_column(primary_key=True, init=False)
date:Mapped[datetime] = mapped_column(DateTime, nullable=False)
heure:Mapped[Optional[str]] = mapped_column(String(100), nullable=False)
event_id:Mapped[int] = mapped_column(ForeignKey("event.id"), nullable=False)
event: Mapped["Event"] = relationship("Event", back_populates="event_dates")
class EventCategory(Base, BaseTemplate):
__tablename__ = "event_category"
id:Mapped[int] = mapped_column(primary_key=True, init=False)
name:Mapped[str] = mapped_column(String(100), nullable=False)
events: Mapped[List["Event"]] = relationship("Event", back_populates="event_category", cascade="all, delete-orphan")
class EventType(Base, BaseTemplate):
__tablename__ = "event_type"
id:Mapped[int] = mapped_column(primary_key=True, init=False)
name:Mapped[str] = mapped_column(String(100), nullable=False)
events: Mapped[List["Event"]] = relationship("Event", back_populates="event_type", cascade="all, delete-orphan")
请帮我解决问题
答:
1赞
Serge Eric KALAGA
11/16/2023
#1
问题来自您的“基”类
class Base(DeclarativeBase, MappedAsDataclass):
pass
由于您从“MappedAsDataclass”继承了它,因此我的 Event 模型的行为类似于 DataClass。 DataClass 考虑了定义参数的顺序(所有具有默认值的参数都位于没有默认值的参数之前) 这导致了错误:
sqlalchemy.exc.InvalidRequestError:为“Event”创建数据类时遇到 Python 数据类型错误:类型参数“user_id”跟在默认参数后面“)。有关此错误的其他理由,请参阅 Python 数据类文档:https://sqlalche.me/e/20/dcte)
评论
User