繁体   English   中英

如何使DataMapper不指定NULL默认值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM