2015-04-24 46 views
0

我有一個表中SQLite數據庫與下面的模式在R:dbGetQuery()脅迫字符串到數字和導致問題

CREATE TABLE os_logs (version STRING, user STRING, date STRING); 

我設置以下命令到被叫cmd變量。

select count(*), version 
    from os_logs 
    group by version 
    order by version; 

當我通過dbGetQuery發送該命令後,我得到數字結果返回版本而不是字符串。

db <- dbConnect(SQLite(),"./os_backup.db") 
dbGetQuery(db,cmd) 

count(*) version 
1421 NA 
1797 0.7 
6 0.71 
2152 0.71 
1123 0.72 
3455 1 
2335 1 

的版本應該是

0.70.1111_Product 
0.71.22_Dev 
0.71.33_Product 
... 

爲什麼在我的SQLite數據庫字符串被變成R中NUMERICS任何想法?如果我在sql cmd行上執行該命令,它可以很好地工作

編輯: 以下是如何創建表。 (隨着越來越多的信息,因爲我編出來的原題。

drop table vocf_logs; 

CREATE TABLE vocf_logs (version STRING, driver STRING, dir STRING, uuid STRING PRIMARY KEY, t_start STRING); 
CREATE TABLE log_os (uuid STRING PRIMARY KEY, os STRING); 

.separator "," 
.import vocf_dirs.csv vocf_logs 

-- Put the OsVersion info from name_redacted into the table 
UPDATE vocf_logs 
SET version=(select log_os.os from log_os where uuid = vocf_logs.uuid); 
+0

你使用哪個軟件包?它是'RSQLite'嗎?另外,你可以發表你如何插入數據的例子嗎?它不應該像你說的那樣發生,而是給出你在問題中的含義。 – while

+0

RSQLite。我添加了更多信息。我有一個27k行的excel表,並且無意停下來,所以我切換到了sqlite數據庫。這是用於將其放入數據庫的順序。操作系統版本必須從第二次努力合併到 – njfrazie

+0

找出來。表創建的數據類型是錯誤的 – njfrazie

回答

0

原始表的創建是錯誤的R中的方法是正確的從這裏找到的數據類型描述:。https://www.sqlite.org/datatype3.html

The declared type of "STRING" has an affinity of NUMERIC, not TEXT. 

當使用TEXT類型創建表時,它按預期工作。

2

你的描述應該可以正常工作是什麼。你必須做不同的東西,或插入不正確的分貝。

這裏是一個一步一步測試,做完全相同的及工程

# Load package and connect 
R> library(RSQLite)  
R> db <- dbConnect(SQLite(),"./os_backup.db") 

# Create db and insert data 
R> dbSendQuery(db, "CREATE TABLE os_logs (version STRING, user STRING, date STRING);") 
R> dbSendQuery(db, "INSERT INTO os_logs VALUES ('0.70.1111_Product', 'while', '2015-04-23')") 
R> dbSendQuery(db, "INSERT INTO os_logs VALUES ('0.70.1111_Product', 'while', '2015-04-24')") 
R> dbSendQuery(db, "INSERT INTO os_logs VALUES ('0.71.22_Dev', 'while', '2015-04-24')") 

# Run query counting versions 
R> dbGetQuery(db, "SELECT version, count(*) FROM os_logs GROUP BY version ORDER BY version;") 

      version count(*) 
1 0.70.1111_Product  2 
2  0.71.22_Dev  1