簡體   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