sqlite 无法添加缺省值为None的非空列

edqdpe6u  于 2022-11-14  发布在  SQLite
关注(0)|答案(2)|浏览(321)

我正尝试在web2py中的默认sqlite3数据库中创建一个名为company的表:

db.define_table('company',
    Field('company_name', notnull=True, unique=True),
    Field('email'),
    Field('phone', notnull=True),
    Field('url3'),
    format = '%(company_name)s'
)

db.company.email.requires = IS_EMAIL()
db.company.url3.requires = IS_EMPTY_OR(IS_URL())

我收到一个错误:
<class‘sqlite3.OperationalError’>无法添加缺省值为NULL的非空列
它来自于这样一句话:

format = '%(company_name)s'

如何解决这个错误?

3b6akqbq

3b6akqbq1#

如果这是一个现有的表,并且您正在添加/更新company_name列,则在添加一个没有缺省值的非空列时,SQLite将会出现错误(请参见here)。
如果表中没有记录,您只需删除该表并从头开始创建它。如果有记录,可以先导出现有数据,然后重新创建表,然后将原始数据导入到新表中。
另外,请注意,web2py不迁移notnullunique等字段属性中的更改。

ergxz8rk

ergxz8rk2#

我添加了一行只使用数据类型字符串的行:address = db.Column(db.String(100))

class Users(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), nullable=False)
    email = db.Column(db.String(50), nullable=False, unique=True)
    # we add line with use only data type String
    address = db.Column(db.String(100))
    date_added = db.Column(db.DateTime, default=datetime.utcnow)

相关问题