sql >> データベース >  >> RDS >> Mysql

Pythonのmysqldbのあいまいなドキュメント

    /usr/lib/pymodules/python2.6/MySQLdb/connections.pyを調べて、connection.escapeと呼ばれる方法を確認することで、これを学びました。 。少しスニッフィングすると、MySQLdb.converters.conversionsにつながります 。スニペットは次のとおりです:

    {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>}
    

    次のように使用できます:

    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'")
    

    PS。ボビーテーブルについて:MySQLdbを通常使用する場合、手動で引数をエスケープする必要はありません。 cursor.executeを呼び出すときは、パラメーター化された引数を使用するだけです。 、MySQLdbは自動的に引数を引用します。

    例:

    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)
    


    1. アポストロフィ(一重引用符)を含むデータを挿入するときにMySQLエラーが発生しますか?

    2. MySQLルートパスワードの変更

    3. mysqlデータベースにスーパー特権を追加する方法は?

    4. MySQL文字列の最後のインデックス