[英]How to get DataMapper to not specify a NULL default value
使用DataMapper的auto_upgrade!
时出现错误auto_upgrade!
根据我的代码中定义的属性在SQLite3数据库中添加字段的方法:
/ history处的DataObjects :: SyntaxError
无法添加默认值NULL的NOT NULL列
违规行的示例为:
property :fieldname, Text, required: true
如果我(a)删除该行,(b)删除required: true
,(c)将true
更改为false
,或(d)添加默认值,则错误消失。
SQLite 不要求每个字段中指定一个默认值,所以这个问题肯定是DataMapper的,而不是SQLite的。
如何解决这个问题,以便DataMapper可以指定一个必填字段,而无需假设不自动指定默认值就意味着默认值应该为NULL?
(如果您想更多地了解为什么我要用这种方式进行设计:将有另一个客户端进程访问SQLite并将数据记录到SQLite数据库中,而Sinatra应用程序将从数据库中提取数据以在浏览器中显示。因此,我希望数据库能够满足现场要求,但是DM的auto_upgrade是一种非常方便的方法,能够根据需要升级数据库-只要它不会在过程中造成问题。)
您需要该字段,因此它不能为NULL。 这是简单的表属性。
当DataMapper运行auto_upgrade时! 它在数据库上运行SQL命令。
CREATE TABLE Test
(
P_Id int NOT NULL,
lname varchar(255) NOT NULL,
fname varchar(255),
Address varchar(255),
City varchar(255)
)
而且做这样的事情是行不通的。
CREATE TABLE Test
(
P_Id int NOT NULL,
lname varchar(255) NOT NULL DEFAULT NULL,
fname varchar(255),
Address varchar(255),
City varchar(255)
)
我在MySQL中测试了它,这是错误。
02:52:43 CREATE TABLE TestTest(P_Id int NOT NULL,lname varchar(255)NOT NULL DEFAULT NULL,fname varchar(255),Address varchar(255),City varchar(255))错误代码:1067.无效的默认值持续0.062秒
更正:SQLite允许您创建具有此类属性的表。 但是,在尝试向该表中插入任何内容时,无论该字段是否为NULL,都会引发错误。 因此,DataMapper可能甚至在创建表之前都会为您做一些清洁工作。
对我来说不清楚是要创建新表还是修改现有表。
如果您有一个现有表,并尝试使用定义为NOT NULL的列对其进行更改,则必须提供一个默认值,以便可以迁移现有行。 RDBMS需要知道要在字段中放置哪些行。
如果要创建新表,则可以使用属性定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.