我有一个名为的数据框,df如下所示:
dte, val
2012-01-01, 23.2323
2012-01-02, 34.343
Run Code Online (Sandbox Code Playgroud)
列上的类型是日期和数字.我想使用已经打开的连接将其写入MySQL数据库.连接工作正常,因为我能够查询db罚款.我尝试运行以下内容:
dbWriteTable(con, name="table_name", value=df, field.types=list("date", "double(20,10)"))
Run Code Online (Sandbox Code Playgroud)
这会生成错误:
函数错误(classes,fdef,mtable):无法找到函数"make.db.names"的继承方法,签名为"MySQLConnection","NULL"
如果我没有指定field.types,并运行:
dbWriteTable(con, name="table_name", value=df)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
mysqlExecStatement(conn,statement,...)出错:RS-DBI驱动程序:(无法运行语句:BLOB/TEXT列'dte'在密钥规范中使用,没有密钥长度)
任何人都可以对此有所了解吗?
谢谢
我对光亮和R非常新,但是使用闪亮的我试图连接到数据库从那里获取数据.当我试图在浏览器上连续访问我的RShiny工作时,我得到了一个错误Cannot allocate a new connection: 16 connections already opened.我怎样才能克服这个错误或者Rshine一次只能期待16个用户?我有另一个堆栈帖子在这里RStudio闪亮错误mysqlNewConnection最大16个连接,但解释上面的网址不清楚.
我是一个R用户,我经常发现我需要编写需要对大型数据集进行子集化的函数(数百万行).当我在大量观察中应用这些函数时,如果我不小心如何实现它,它会非常耗时.
为此,我有时使用data.table包,这比使用数据帧的子集提供了更快的速度.最近,我开始尝试使用像RMySQL这样的包,将一些表推送到mysql,并使用该包运行sql查询并返回结果.
我发现性能改进不一.对于较小的数据集(数百万),似乎将数据加载到data.table并设置正确的密钥可以实现更快的子集化.对于较大的数据集(10到100万),看起来向mysql发送查询的速度更快.
想知道是否有人知道哪种技术应该更快地返回简单的子集或聚合查询,以及这是否应该取决于数据的大小?我知道在data.table中设置键有点类似于创建索引,但除此之外我没有更多的直觉.
(通过对象关系映射,我的意思是这里描述的内容:维基百科:对象关系映射.)
以下是我在R中想象这项工作的方式:一种"虚拟数据框架"链接到数据库,并在访问时返回SQL查询的结果.例如,head(virtual_list)实际上会返回(select * from mapped_table limit 5)映射数据库的结果.
我在John Myles White找到了这篇文章,但在过去的3年中似乎没有任何进展.
是否有实现此功能的工作包?
如果不,
每次我尝试安装RMySQL时都会出现以下错误:
Installing package into ‘/home/ehsan/R/x86_64-pc-linux-gnu-library/3.0’
(as ‘lib’ is unspecified)
* installing *source* package ‘RMySQL’ ...
** package ‘RMySQL’ successfully unpacked and MD5 sums checked
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking …Run Code Online (Sandbox Code Playgroud) 我正在从移动RSQLite到RMySQL,我被迷惑user和password领域.FWIW,我正在运行Windows 7,R 2.12.2,MySQL 5.5(全部64位)和RMySQL 0.7-5.
我RMySQL按照之前的SO问题安装,据我所知,它可以工作(即,我可以加载包library(RMySQL)).但是当我尝试从R数据导入指南运行教程时,我收到"无法连接到数据库..."错误.这是指南教程中的代码:
library(RMySQL) # will load DBI as well
## open a connection to a MySQL database
con <- dbConnect(dbDriver("MySQL"), user = "root", password = "root", dbname = "pookas")
## list the tables in the database
dbListTables(con)
## load a data frame into the database, deleting any existing copy
data(USArrests)
dbWriteTable(con, "arrests", USArrests, overwrite = TRUE)
dbListTables(con)
## get the …Run Code Online (Sandbox Code Playgroud) 我试图使用dplyr连接到远程数据库,我通常通过ssh隧道查询.
我首先建立一个如下所示的ssh隧道:
alias tunnel_ncg='ssh -fNg -L 3307:127.0.0.1:3306 mysqluser@myhost mysql5 -h 127.0.0.1:3306 -P 3307 -u mysqluser -p mypassword'
Run Code Online (Sandbox Code Playgroud)
此时,我可以通过连接到localhost:3307来访问数据库.例如:
mysql -h '127.0.0.1' -P 3307 -u mysqluser
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过dplyr访问同一个数据库,我收到一个错误,抱怨它无法连接到本地MySQL套接字:
> conDplyr = src_mysql(dbname = "mydb", user = "mysqluser", password = "mypassword", host = "localhost", port=3307)
Error in .local(drv, ...) :
Failed to connect to database: Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Run Code Online (Sandbox Code Playgroud)
我的理解是RMySQL/dplyr正在尝试在本地计算机中查找套接字文件,但他们应该真正在远程服务器中查找它.有没有办法解决这个问题,或者解决方法?
更新:
如果我尝试通过dbConnect/RMySQL连接,连接正常:
> dbConnect(dbDriver("MySQL"), user="mysqluser", password="mypassword", dbname="mydb", host="127.0.0.1", port=3307)
<MySQLConnection:0,1>
Run Code Online (Sandbox Code Playgroud) 我使用RMySQL和MySQL数据库来存储我的数据集.有时数据会被修改,或者我也会将结果存储回数据库.简而言之,在我的用例中,R和数据库之间存在相当多的交互.
大部分时间我使用的便利功能,如dbWriteTable与dbReadTable写入和读取我的数据.不幸的是,这些只是完全忽略了R数据类型和MySQL字段类型.我的意思是我希望MySQL日期字段最终在一个Date或POSIX类中.另一种方法我认为这些R类存储为一个有点对应的MySQL字段类型.这意味着日期不应该是角色 - 我不希望在这里区分浮动和双打......
我也尝试过使用dbGetQuery- 那里有相同的结果.在阅读本手册时是否有一些我完全错过的内容,或者在这些软件包中是否完全不可能?一个不错的工作会怎样?
编辑:@mdsummer我试图在文档中找到更多内容,但只发现了这些令人失望的行:`MySQL表作为data.frames读入R,但没有将字符或逻辑数据强制转换为因子.类似地,在导出data.frames时,因子被导出为字符向量.
整数列通常作为R整数向量导入,但BIGINT或UNSIGNED INTEGER等情况除外,它们被强制转换为R的双精度向量以避免截断(当前R的整数是带符号的32位数).
时间变量作为字符数据导入/导出,因此您需要将这些变量转换为您喜欢的日期/时间表示.
这个过程可以从MySQL命令行远程和本地主机上运行,并且在从PHP调用时可以正常工作.在所有情况下,补助金都是足够的:
CREATE PROCEDURE `myDB`.`lee_expout` (IN e int, IN g int)
BEGIN
select lm.groupname, lee.location, starttime, dark,
inadist,smldist,lardist,emptydur,inadur,smldur,lardur,emptyct,entct,inact,smlct,larct
from lee join leegroup_map lm using (location)
where exp_id= e and std_interval!=0 and groupset_id= g
order by starttime,groupname,location;
END
Run Code Online (Sandbox Code Playgroud)
我试图从R调用它:
library(DBI)
library(RMySQL)
db <- dbConnect(MySQL(), user="user", password="pswd",
dbname="myDB", host="the.host.com")
#args to pass to the procedure
exp_id<-16
group_id<-2
#the procedure call
p <- paste('CALL lee_expout(', exp_id, ',', group_id,')', sep= ' ')
#the bare query
q <- paste('select lm.groupname, lee.location, starttime, dark,
inadist,smldist,lardist,emptydur,inadur,smldur,lardur,emptyct,entct,inact,smlct,larct
from lee …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么我的RMySQL软件包无法安装 - 这就是我得到的:
> install.packages('RMySQL',type='source')
trying URL 'http://cran.mirrors.hoobly.com/src/contrib/RMySQL_0.7-5.tar.gz'
Content type 'application/x-gzip' length 160769 bytes (157 Kb)
opened URL
downloaded 157 Kb
* installing *source* package 'RMySQL' ...
ERROR: configuration failed for package 'RMySQL'
* removing 'C:/PROGRA~1/R/R-212~1.0/library/RMySQL'
The downloaded packages are in '(foo)'
Warning message:
In install.packages("RMySQL", type = "source") : installation of package 'RMySQL' had non-zero exit status
Run Code Online (Sandbox Code Playgroud)
我不认为这是MySQL安装的问题,因为正确的值似乎在注册表中:
> Sys.getenv('MYSQL_HOME')
MYSQL_HOME "C:/PROGRA~1/MySQL/MYSQLS~1.1/"
> readRegistry("SOFTWARE\\MySQL AB", hive="HLM", maxdepth=2)
$`MySQL Server 5.1`
$`MySQL Server 5.1`$DataLocation
[1] "C:\\Documents and Settings\\All Users\\Application Data\\MySQL\\MySQL …Run Code Online (Sandbox Code Playgroud)