转义字符串Python for MySQL

wqsoz72f  于 2022-11-28  发布在  Mysql
关注(0)|答案(7)|浏览(170)

我使用Python和MySQLdb下载网页并将其存储到数据库中。问题是我无法将复杂的字符串保存到数据库中,因为它们没有正确转义。
Python中有没有一个函数可以用来转义MySQL中的字符串?我试过使用'''(三重单引号)和""",但是没有用。我知道PHP有mysql_escape_string(),Python中有类似的东西吗?

  • 谢谢-谢谢
ymzxtsji

ymzxtsji1#

conn.escape_string()

请参阅MySQL C API函数Map:http://mysql-python.sourceforge.net/MySQLdb.html

tvmytwxo

tvmytwxo2#

如果您使用MySQLdb库的实现来构建SQL查询字符串,而不是尝试构建自己的查询字符串,那么MySQLdb库实际上会为您完成这一任务。
不做:

sql = "INSERT INTO TABLE_A (COL_A,COL_B) VALUES (%s, %s)" % (val1, val2)
cursor.execute(sql)

应执行:

sql = "INSERT INTO TABLE_A (COL_A,COL_B) VALUES (%s, %s)"
cursor.execute(sql, (val1, val2))
snvhrwxg

snvhrwxg3#

>>> import MySQLdb
>>> example = r"""I don't like "special" chars ¯\_(ツ)_/¯"""
>>> example
'I don\'t like "special" chars \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf'
>>> MySQLdb.escape_string(example)
'I don\\\'t like \\"special\\" chars \xc2\xaf\\\\_(\xe3\x83\x84)_/\xc2\xaf'
xeufq47z

xeufq47z4#

使用sqlalchemy的text函数删除特殊字符的解释:

注意下面函数text("your_insert_statement")的用法,它的作用是通知sqlalchemy传入的字符串中的所有问号和百分号都应被视为文字。

import sqlalchemy
from sqlalchemy import text
from sqlalchemy.orm import sessionmaker
from datetime import datetime
import re

engine = sqlalchemy.create_engine("mysql+mysqlconnector://%s:%s@%s/%s"
     % ("your_username", "your_password", "your_hostname_mysql_server:3306",
     "your_database"),
     pool_size=3, pool_recycle=3600)

conn = engine.connect()

myfile = open('access2.log', 'r')
lines = myfile.readlines()

penguins = []
for line in lines:
   elements = re.split('\s+', line)

   print "item: " +  elements[0]
   linedate = datetime.fromtimestamp(float(elements[0]))
   mydate = linedate.strftime("%Y-%m-%d %H:%M:%S.%f")

   penguins.append(text(
     "insert into your_table (foobar) values('%%%????')"))

for penguin in penguins:
    print penguin
    conn.execute(penguin)

conn.close()
xcitsw88

xcitsw885#

另一个解决这个问题的方法是在python中使用mysqlclient时使用类似的方法。
假设您要输入的数据类似于<ol><li><strong style="background-color: rgb(255, 255, 0);">Saurav\'s List</strong></li></ol>。它同时包含双引号和单引号。
您可以使用下列方法来逸出引号:
更新聊天设置
注意:需要三个\字符来转义无格式python字符串中的单引号。

j0pj023g

j0pj023g6#

安装sqlescapy包:

pip install sqlescapy

那么您可以转义原始查询中的变量

from sqlescapy import sqlescape

query = """
    SELECT * FROM "bar_table" WHERE id='%s'
""" % sqlescape(user_input)
5n0oy7gb

5n0oy7gb7#

{!a}应用ascii(),因此转义非ASCII字符,如引号,甚至图释。

cursor.execute("UPDATE skcript set author='{!a}',Count='{:d}' where url='{!s}'".format(authors),leng,url))

Python 3文档

相关问题