2015-04-24 24 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