복붙노트

[PYTHON] MySQL 용 이스케이프 문자열 파이썬

PYTHON

MySQL 용 이스케이프 문자열 파이썬

파이썬과 MySQLdb를 사용하여 웹 페이지를 다운로드하고 데이터베이스에 저장합니다. 문제는 제대로 이스케이프 처리되지 않았기 때문에 복잡한 문자열을 데이터베이스에 저장할 수 없다는 것입니다.

파이썬에서 MySQL 용 문자열을 이스케이프 (escape) 할 수있는 함수가 있습니까? 나는 '' '(트리플 간단한 따옴표)와 "" "로 시도했지만 작동하지 않았습니다. PHP가 mysql_escape_string ()을 가지고 있고, Python에서 비슷한 것을 알고 있습니까?

감사.

해결법

  1. ==============================

    1.

    conn.escape_string()
    

    MySQL C API 함수 매핑을 참조하십시오 : http://mysql-python.sourceforge.net/MySQLdb.html

  2. ==============================

    2.자신의 구현을 사용하여 SQL 쿼리 문자열을 작성하는 대신 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))
    
  3. ==============================

    3.

    >>> 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'
    
  4. ==============================

    4.특수 문자의 해석을 제거하려면 sqlalchemy의 text 함수를 사용하십시오.

    특수 문자의 해석을 제거하려면 sqlalchemy의 text 함수를 사용하십시오.

    아래 함수 텍스트 ( "your_insert_statement")의 사용에 유의하십시오. 그것이하는 것은 sqlalchemy에 전달 된 문자열의 모든 questionmarks와 퍼센트 기호가 리터럴로 간주되어야 함을 의미합니다.

    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()
    
  5. from https://stackoverflow.com/questions/3617052/escape-string-python-for-mysql by cc-by-sa and MIT license