Tôi đã học được điều này bằng cách xem trong /usr/lib/pymodules/python2.6/MySQLdb/connections.py để xem cách nó được gọi là connection.escape
. Một chút dò xét xung quanh sẽ dẫn đến MySQLdb.converters.conversions
. Đây là một đoạn mã:
{0: <class 'decimal.Decimal'>,
1: <type 'int'>,
...
<type 'dict'>: <built-in function escape_dict>,
<type 'NoneType'>: <function None2NULL at 0xae9717c>,
<type 'set'>: <function Set2Str at 0xae9709c>,
<type 'str'>: <function Thing2Literal at 0xae971b4>,
<type 'tuple'>: <built-in function escape_sequence>,
<type 'object'>: <function Instance2Str at 0xae971ec>,
<type 'unicode'>: <function Unicode2Str at 0xae9710c>,
<type 'array.array'>: <function array2Str at 0xae9725c>,
<type 'bool'>: <function Bool2Str at 0xae97294>}
Bạn có thể sử dụng nó như thế này:
import MySQLdb
import MySQLdb.converters
import datetime
now=datetime.datetime.now()
connection=MySQLdb.connect(
host=HOST,user=USER,passwd=PASS,db=MYDB)
print(connection.escape((1,2,now),MySQLdb.converters.conversions))
# ('1', '2', "'2010-07-24 19:33:59'")
Tái bút. Về Bobby Tables:Để sử dụng MySQLdb bình thường, bạn không phải thoát các đối số theo cách thủ công. Chỉ sử dụng các đối số được tham số hóa khi gọi cursor.execute
và MySQLdb sẽ tự động trích dẫn các đối số cho bạn.
Ví dụ:
sql='insert into students (name,grade,date) values (%s, %s, %s)'
args=("Robert'); DROP TABLE Students; --",60,now) # no manual quotation necessary
cursor=connection.cursor()
cursor.execute(sql,args)