基本python; ' 在停止我的脚本的文本变量中;心理战&tweepy; python、postgres 和 twitter

Basic python; ' in text variable which stops my script; psycopg&tweepy; python, postgres and twitter

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

我可以通过以下行 return 消息文本:

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

每当推文的文本中包含 ' 时,我的脚本就会停止。我可以制作一个函数来提取推文并将其放入两个“。但我认为当推文包含一个”时我会遇到同样的问题。然后我可以创建一个函数来检查包含 ' 或 " 的推文并删除这些语句。但对于这个简单的问题来说,这似乎有很多工作要做。

所以我想知道如何在不编写大量脚本的情况下解决这个问题。

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

*** 更新

当我将消息插入我的 postgres table 时确实弹出了我的错误。

我刚刚尝试了 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...

第四个参数是推文的文本,文本以'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))

现在DB层会为你进行转义