首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基本python;在停止我的脚本的文本变量中;psycopg&tweepy;python、postgres和twitter

基本python;在停止我的脚本的文本变量中;psycopg&tweepy;python、postgres和twitter
EN

Stack Overflow用户
提问于 2016-02-27 11:11:37
回答 1查看 78关注 0票数 0

我有一个脚本来挖掘tweet并将它们输入我的postgres数据库。它适用于大多数消息。

使用下面的行,我可以返回消息的文本:

代码语言:javascript
运行
复制
tweet.text.encode('utf-8')

每当推特上有一个‘在文本我的脚本停止’。我可以做一个函数,提取推文,并将其放在两个“,但我想我会遇到同样的问题,当一条推文包含一个”。然后,我可以创建一个函数,检查包含“或”的tweet,并将这些语句删除。但是,对于这个简单的问题,似乎有很多工作要做。

因此,我想知道如何克服这个问题,而无需付出太多的脚本努力。

我不是python方面的专家,我的问题之一就是我试图用一种困难的方法来解决问题,而通常有一种简单得多的方法。目前的问题使我认为这是一种类似的情况。因此,我在此提出问题。

*最新情况

实际上,在将消息插入postgres表时,会弹出错误。

我只是尝试了repr(),但仍然得到了类似的错误消息。

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "...python.py", line 28, in <module>
    cur.execute("INSERT INTO Test(userid, created, retweets, message) VALUES('{0}', '{1}', '{2}', '{3}')".format(tweet.user.id, tweet.created_at, tweet.retweet_count, ber))
psycopg2.ProgrammingError: syntax error at or near "E19"
LINE 1: ...LUES('1251822199', '2016-02-27 10:23:40', '0', 'b'E19 (A1) M...

第四个参数是tweet的文本,以'b'E19作为文本开始。在这里失败。

用于将数据输入postgres的行如下:

代码语言:javascript
运行
复制
cur.execute("INSERT INTO Test(message) VALUES('{0}')".format(repr(tweet.text.encode('utf-8'))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-27 11:29:59

因为您使用字符串操作手动创建查询,因此需要转义查询中的引号。

但更好的方法是使用参数化查询,并允许psycopg2对特殊字符进行转义。如果某些参数来自不受信任的来源,例如用户,这也将使您的代码更不容易受到SQL注入攻击。

代码语言:javascript
运行
复制
cur.execute("INSERT INTO Test(message) VALUES(%s)", (tweet.text.encode('utf-8'),))

代码语言:javascript
运行
复制
cur.execute("INSERT INTO Test(userid, created, retweets, message) VALUES(%s, %s, %s, %s)", (tweet.user.id, tweet.created_at, tweet.retweet_count, ber))

现在DB层将为您执行转义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35668980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档