【发布时间】:2018-04-02 11:52:16
【问题描述】:
我有一个名为 users 的表,这是它的架构:
class User(db.Model):
__tablename__ = "Users"
id = db.Column(db.Integer, unique=True, primary_key=True)
firstname = db.Column(db.String(64), unique=False, nullable=False)
lastname = db.Column(db.String(64), unique=False, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(93), unique=False, nullable=False)
phone = db.Column(db.String(10), unique=True, nullable=False)
publickey = db.Column(db.Text, unique=True, nullable=True)
isitseller = db.Column(db.Boolean, unique=False, nullable=False)
money = db.Column(db.Float, unique=False, nullable=False)
def __init__(self, firstname, lastname, email, password, phone, publickey, isitseller):
self.firstname = firstname
self.lastname = lastname
self.email = email
self.password = generate_password_hash(password)
self.phone = phone
self.publickey = publickey
self.isitseller = isitseller
self.money = 0.00
def check_password(self, password):
return check_password_hash(self.password, password)
def __repr__(self):
return '<User %r>' % self.firstname + " " + self.lastname
但是当我尝试使用 db.create_all() 创建用户表时,它会输出我
(_mysql_exceptions.OperationalError) (1170, "BLOB/TEXT column 'publickey' used in key specification without a key length") [SQL: '
CREATE TABLE `Users` (
id INTEGER NOT NULL AUTO_INCREMENT,
firstname VARCHAR(64) NOT NULL,
lastname VARCHAR(64) NOT NULL,
email VARCHAR(120) NOT NULL,
password VARCHAR(93) NOT NULL,
phone VARCHAR(10) NOT NULL,
publickey TEXT,
isitseller BOOL NOT NULL,
money FLOAT NOT NULL,
PRIMARY KEY (id),
UNIQUE (id),
UNIQUE (email),
UNIQUE (phone),
UNIQUE (publickey),
CHECK (isitseller IN (0, 1))
)
']
据我了解,我需要使用 TEXT 或 BLOB 类型的列之外的任何内容,但我该怎么做呢?或以任何方式使用 TEXT 或 BLOB 作为 UNIQUE?
【问题讨论】:
-
publickey必须是唯一的并且可以是null? ;) 尽管如此,真正的错误可以在stackoverflow.com/questions/1827063/…
标签: python mysql flask-sqlalchemy