python - 如何在 Web2py 中对外键添加 NOT NULL 约束

标签 python web2py

我在使我的模型在 Web2py 中生成非空外键时遇到了问题。 我已经尝试了我所知道的一切以及我能在网上找到的一切。这是一个简单的例子:

db = DAL('sqlite://storage.db')
users=db.define_table('user', Field('name') )
cars=db.define_table('cars', Field('user', users, notnull=True), Field('Model') )
print db._lastsql

This print ===
CREATE TABLE cars(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user INTEGER REFERENCES users(id) ON DELETE CASCADE,
    Model CHAR(512)
);
=============

出于某种原因,web2py 似乎忽略了 notnull=True。

我也尝试了一些变通方法,比如给出 default='' 但没有帮助。 这是另一个使用 MySQL 后端的例子

db = DAL('mysql://test:test@localhost:3306/test')
db.define_table('property',
   Field('type', notnull=True),
   Field('area','integer', notnull=True),
   Field('rooms','integer', default = 0, notnull=True))

db.define_table('media',
   Field('title', length = 30),
   Field('file', 'upload', autodelete=True, notnull=True),
   Field('prop_id', db.property, notnull=True, default='', required=True))

CREATE TABLE SQL:
CREATE TABLE  `propdb`.`media` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(30) DEFAULT NULL,
  `file` varchar(512) NOT NULL,
  `prop_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `prop_id__idx` (`prop_id`),
  CONSTRAINT `prop_media_ibfk_1` FOREIGN KEY (`prop_id`) REFERENCES `prop_property` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

在 MySQL 中,它不仅忽略了 notnull,而且使列“DEFAULT NULL”如您所见列“prop_id”。 有人有什么想法吗?如何让 web2py 为外键添加“NOT NULL”?

注意:删除 default='' 没有任何区别。我根据@simplyharsh 的建议和讨论添加了它 http://www.mail-archive.com/web2py@googlegroups.com/msg12879.html

最佳答案

设置notnull=True时,您还应该设置一个默认属性。

考虑这个 thread .

关于python - 如何在 Web2py 中对外键添加 NOT NULL 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3421568/

相关文章:

Emacs 中的 Python 解释器重复行

python - 为什么 pip install -e 成功后,pip install from github 却失败?

python - tensorflow 多项式数组

django - 是否可以将自定义方法添加到 Web2Py 的内置 "models"中?

python - 如何减少我的 python 应用程序连接到 mysql 服务器的超时

javascript - 图像未加载且未显示在 HTML Canvas 上

python - 使用 Pandas 修改 Excel 文件,布局更改最少

python - 如何在特定模式的 pandas/python 中加载大于 10gb 的 json 文件

sqlite - 无法在 sqlite3 和 web2py 中添加具有默认值 NONE 的 NOT NULL

google-app-engine - web2py 类似于谷歌应用引擎