你好,我有以下模型:
@dataclass
class User(Base, TimestampMixin):
__tablename__ = "users"
email: str
password: int
name: str
id: Optional[int] = None
id = Column(UUID(as_uuid=True), primary_key=True)
email = Column(String(50), unique=True, nullable=False)
password = Column(String(20), nullable=False)
name = Column(String(15), unique=True, nullable=False)当我尝试用以下代码生成一个新用户时:
def insert_user(session: Session, name: str, email: str, password: str) -> None:
try:
user = User(name=name, email=email, password=password)
session.add(user)
except:
session.rollback()
raise InsertUserError
else:
session.commit()我得到以下错误:
ERROR in handlers: (psycopg2.errors.InvalidForeignKey) missing "id" primary key column我没有输入id,因为我猜到psycopg2会自己生成它,但它没有。
如何自动创建该字段?
发布于 2022-08-29 17:54:21
仅仅因为列被标记为主键,并不意味着它具有默认值。SQLAlchemy将自动生成正确的SQL以自动生成主键仅当使用基于整数的主键列时。.对于UUID主键,您负责定义默认值。
您可以使用Python默认值:
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)(导入uuid模块)。此默认值仅在创建SQLAlchemy模型实例时使用,而不是在使用其他地方生成的SQL插入表时使用。
如果您已经安装了模块 (例如create extension uuid-ossp),并且希望使用函数在服务器上生成缺省值,则可以使用参数
id = Column(
UUID(as_uuid=True),
primary_key=True,
server_default=func.uuid_generate_v4(),
)其中func是sqlalchemy.sql.expression.func (from sqlalchemy.sql import func就足够了)。
https://stackoverflow.com/questions/73532745
复制相似问题