2016-09-19 78 views
0

查詢1:使用pandas read_sql從MySQL讀取數據。生成的數據幀有一個列,其數據類型是unicode字符串。該列轉換爲元組並用於以下查詢。read_sql和redshift在unicode上給出錯誤

查詢2:使用pandas read_sql從Redshift讀取。查詢是類似的

select b.a from b where b.c in {0} 

在一個字符串,它給了我一個錯誤。該字符串就像你「你好」有「這是一個有效的Unicode字符串。 錯誤是

syntax error at or near ""Hello 'There"" 

但它不應該採取這種方式。它把它當作一個空字符串(「」),然後像未理解的符號(你好「有‘’)

應該有的配置改變或在read_sql一些參數添加

回答

0

我懷疑那正在被別人替換標記(我用{something})像

'syntax error at or near "{something}"' 

模板,這意味着你應該將它看作是一個關於一個字符串的投訴,其價值似乎是生成的錯誤消息

'"Hello \' There"' 

換句話說,看起來您可能正在處理以雙引號字符開始和結尾的十五個字符的字符串,儘管總會有一些不適當的轉換或引用添加了雙引號的可能性。沒有代碼,沒有追蹤,很難說。

看起來好像在處理鏈的某個地方沒有正確處理SQL字符串文字中的單撇號。在SQL該字符串會被正確地表示爲

'"Hello, ''There"' 

你會發現,嵌入在字符串中的單引號不得不加倍來代表它 - SQL語法明確表示這是嵌入單引號的正確方法在SQL字符串常量中。既然你實際上沒有顯示你的代碼的細節,那麼這個答案的幫助是有限的。

我懷疑你可能會寫自己的SQL,在這種情況下給出的變量查詢sql你可能要考慮使用

sql.replace("'", "''") 

爲注入查詢值。但是,如果您打算將用戶輸入併入此方案,請注意所有關於SQL注入的常見警告。

+0

值不是''「你好,'有''' 它是'」你好,'有'或者你可以說''你好,\'有' –

+0

我正在使用熊貓閱讀sql不是原生python使用它的方式 –

+0

在元組中它可以看作是 'u「你好'有' –