基本蟒蛇;' 在文本变量中,这会停止我的脚本;Psycopg&tweepy; Python、Postgres 和 Twitter



我有一个脚本可以挖掘推文并将它们输入到我的postgres数据库中。它适用于大多数消息

通过以下行,我可以返回消息的文本:

tweet.text.encode('utf-8')

每当推文在文本中有 ' 时,我的脚本就会停止。我可以创建一个函数来提取推文并将其放在两个"内。但我想当一条推文包含".然后我可以创建一个函数来检查包含 ' 或 " 的推文并捕获这些语句。但对于这个简单的问题,似乎还有很多工作要做。

所以我想知道如何克服这个问题,而无需太多的脚本工作。

不是 python 方面的专家,我的问题之一是我试图以一种困难的方式解决问题,而通常有一种更简单的方法。目前的问题让我觉得这是一个这样的场景。因此,我在这里的问题。

***更新

确实在将

消息插入我的 postgres 表时弹出了我的错误。

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

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...

第 4 个参数是推文的文本,以"b'E19"开头作为文本。它在这里失败了。

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

cur.execute("INSERT INTO Test(message) VALUES('{0}')".format(repr(tweet.text.encode('utf-8'))))

由于您是使用字符串操作手动创建查询,因此需要对查询中的引号进行转义。

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

cur.execute("INSERT INTO Test(message) VALUES(%s)", (tweet.text.encode('utf-8'),))

cur.execute("INSERT INTO Test(userid, created, retweets, message) VALUES(%s, %s, %s, %s)", (tweet.user.id, tweet.created_at, tweet.retweet_count, ber))

现在,数据库层将为您执行转义。

最新更新