最近在学fastapi,使用的数据库是SQL Server
在FastApi官方教程的SQL Database章节里,有这么一段代码:
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True)
hashed_password = Column(String)
is_active = Column(Boolean, default=True)
items = relationship("Item", back_populates="owner")
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True)
description = Column(String, index=True)
owner_id = Column(Integer, ForeignKey("users.id"))
owner = relationship("User", back_populates="items")
我运行之后,总会报错:
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]表 'users' 中的列 'email' 的类型不能用作索引中的键列。 (1919) (SQLExecDirectW)")
经过反复查询,得知对于Column(String, index=True)
这种列,必须给String一个长度,比如String(50)
就可以解决此问题,否则实际上建表的语句就是nvarchar(max)
了。
网友评论