Из Документы SQLAlchemy :
SQL Server поддерживает специальную строку «MAX» в типах данных sqltypes.VARCHAR и sqltypes.NVARCHAR, чтобы указать «максимально возможную длину». В настоящее время диалект обрабатывает это как длину «None» в базовом типе ...
И ссылка API для sqlalchemy.dialects.mssql.VARCHAR
показывает сигнатуру конструктора как:
class sqlalchemy.dialects.mssql.VARCHAR(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False, _expect_unicode=False)
Поскольку значение по умолчанию length
равно None
, а SQLAlchemy использует length=None
для сигнализации о максимальной длине varchar, все ваши столбцы String
определяются как таковые, что вы можете увидеть всообщение об ошибке, которое вы отправили:
.. электронная почта VARCHAR (макс.) NULL, пароль VARCHAR (макс.) NULL
Из Документы по SQL Server :
Столбцы, содержащие текст, текст, изображение, varchar (max), nvarchar (max) и varbinary (max)типы данных нельзя указывать в качестве столбцов ключа индекса ...
Далее говорится, что они могут использоваться в качестве столбцов неключевого индекса в кластеризованном индексе, но согласно этот ответ , varchar(max)
будет хранить более 2 миллиардов однобайтовых символов. Я очень подозреваю, что вам не нужно хранить столько символов в поле электронной почты, поэтому я рекомендую ограничить длину столбца электронной почты:
email = db.Column(db.String(256), unique=True)