簡體   English   中英

預定義函數,用於格式化Python中用於SQL的字符串

[英]Pre-defined function to format strings in Python to be used in SQL

首先我是法國人所以,如果你發現我的信息有任何錯誤,請不要猶豫告訴我! :)

這是我的問題:我正在制作一個Python函數,構建SQL請求,在我的數據庫中插入一個大字符串(HTML代碼到網頁)。

您可能知道,SQL對您使用的字符串有一些要求。 例如,你不能使用' I'm a developper'句子,因為'''的東西。

您是否知道是否存在任何預定義的函數來修改鏈以確保我可以在SQL請求中使用它?

我也問這個因為我不知道字符串的所有要求都沒有問題。

我希望我已經清楚了,如果我沒有,請告訴我! 祝你今天愉快。

編輯:我在Python 3.4.3 EDIT2:我正在使用MySQL

這是一個非常廣泛的問題,我認為你應該改進它。

至於SQL的良好實踐,首先需要:

  • 確保您使用正確的庫(以及最新的)取決於您的情況(MySQL,Oracle,SQLite等)

  • 逃脫字符串。 該庫通常具有此功能。 您也可以使用format%

  • 測試,單元測試或至少是手動測試......我通常做的原型是首先生成SQL語句並打印它。 然后我復制這個語句並直接測試它到SQL命令行。 這樣你就可以確定它適用於SQL。 然后從那里,你需要用\\來轉義特殊字符。 然而,第二點將涵蓋這一點。

  • 最后,您希望將代碼包裝在try / catch語句中,以便控制失敗。

  • 如果它仍然不起作用,那么好的,有點hacky, .replace()會。 一個例子是: .replace("'", "\\'") 確保您可以標准化您的輸入。

編輯:如果覆蓋邊緣情況,語句的長度無關緊要。

編輯2:如果您使用的是mysql-python, 使用MySQLdb.escape_string(statement) https://dev.mysql.com/doc/connector-python/en/connector-python-api-cext-escape-string.html

我相信你只需要逃避角色,這應該有效。

my_sql_string = 'this my \'word\' with escaped character'

另外,你應該從sqlalchemy查看“text”對象: http//docs.sqlalchemy.org/en/latest/core/tutorial.html#using-textual-sql

暫無
暫無

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

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