簡體   English   中英

基本的python; '在文本變量中停止我的腳本; psycopg&tweepy; python,postgres和Twitter

[英]Basic python; ' in text variable which stops my script; psycopg&tweepy; python, postgres and 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...

第四個參數是推文的文本,並以'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))

現在,數據庫層將為您執行轉義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM