Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用R在SQL查询中执行参数替换?_R_Rsqlite - Fatal编程技术网

如何使用R在SQL查询中执行参数替换?

如何使用R在SQL查询中执行参数替换?,r,rsqlite,R,Rsqlite,在Python中编程特定于SQL的东西我已经习惯了在执行普通SQL查询时总是使用参数替换,如下所示: # Never do this -- insecure! symbol = 'RHAT' c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol) # Do this instead t = ('RHAT',) c.execute('SELECT * FROM stocks WHERE symbol=?', t) 他们甚至在

Python
中编程特定于SQL的东西我已经习惯了在执行普通SQL查询时总是使用参数替换,如下所示:

# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)

# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
他们甚至在
psycopg2
文档中写道:

从不,从不从不使用Python字符串连接(+)或字符串参数插值(%)将变量传递给SQL查询字符串。甚至在枪口下也没有

现在我必须将数据从
R
保存到SQLite数据库中。我尝试使用只接受两个参数的函数
dbSendQuery
来实现这一点:连接处理程序和查询本身。但我如何提供替换的参数


通过谷歌搜索我发现(令人惊讶!)在R社区中,人们总是建议使用
paste
构建SQL查询,然后将其馈送到
dbSendQuery
。但是安全和优雅呢?好像没人在乎。。。我个人不理解这一点。

对于RSQLite,您可以使用
dbGetPreparedQuery
进行参数化查询(即,将值绑定到准备好的语句)。看见但是,必须将绑定值作为dataframe对象传递:

sql <- "SELECT * FROM stocks WHERE symbol=?"

t <- 'RHAT'
df <- dbGetPreparedQuery(con, sql, bind.data=data.frame(symbol=t))

sql为什么在使用SQLite时要阅读作为Postgres API的
psycopg2
docs?可能存在重复。另请参见,我不知道
粘贴
命令代表了安全问题…@cory google“Bobby Tables”。@HongOoi对,我知道什么是SQL注入。在R世界中,这通常不是什么大问题,因为SQL查询通常不是由随机的公众成员交互完成的,而是在本地运行的脚本中完成的。因此,问题应该是如何清理sql查询中的输入,或者如何避免这家伙指责R用户粗心大意和不雅。哦,谢谢@Parfait,这正是我想要的!我知道这个文档,实际上我使用搜索来查找里面的单词“parameter”,但是他们称这个过程为“SQL准备”,所以我没有找到它。