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