python2.7 - python 如何执行mysql单个参数过滤
高洛峰
高洛峰 2017-04-18 10:22:21
0
2
723

使用python执行mysql,报错了:

name = "AAA'A"
cursor.execute('select * from tb where name=%s',name)
cursor.execute('select * from tb where name=%s',(name))

都会报错

query = query % tuple([db.literal(item) for item in args])
TypeError: not all arguments converted during string formatting

但是以下不会报错:

name = "AAA'A"
cursor.execute('select * from tb where name=%s and %s',(name,1))

python27 如何过滤mysql 单个参数

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
小葫芦

Étant donné que la personne qui a posé la question n'a pas mentionné quelle bibliothèque est utilisée pour se connecter à la base de données, on suppose que vous utilisez mysqldb.
Vous pouvez jeter un œil au code source de mysqldb :

...
def execute(self, query, args=None):
    """
    ...
    args -- optional sequence or mapping, parameters to use with query.
    ...
    """
    if args is not None:
        # 首先判断args是否为字典类型
        if isinstance(args, dict):
            # 以k-v形式填入查询语句中。
            query = query % dict((key, db.literal(item))
                                 for key, item in args.iteritems())
        # 当args为非字典类型时
        else:
            # 遍历args, 最后生成一个元组填入查询语句中。
            query = query % tuple([db.literal(item) for item in args])
    ...

Comme vous pouvez le voir, le paramètre args est une séquence ou un mappage facultatif, c'est-à-dire que le type attendu du paramètre args est list ou tuple.
Regardez ensuite les paramètres d'entrée que vous avez donnés :

>>> name = 'test'
>>> type(name)
<type 'str'>
>>> type((name))
<type 'str'>
>>> type(('name', 1))
<type 'tuple'>

Donc, la solution est simple :

>>> type((name, ))
<type 'tuple'>
>>> cursor.execute('select * from tb where name=%s',(name, ))
1L

Un petit détail entre en jeu ici.
Lors de la création d'un tuple avec un seul élément, vous devez ajouter une virgule, sinon l'interpréteur le créera sous forme de chaîne.

阿神
cursor.execute('select * from tb where name="%s"',name)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!