것 같습니다.
with connection as cursor:
cursor.execute(query, parameters)
connection
가 열려있는 데이터베이스 연결 개체입니다, query
이 매개 변수가있는 SQL 문이며, parameters
는 사용자가 제공 한 값은 다음과 같습니다 MySQLdb는 다음과 같이, with
를 통해 트랜잭션 컨텍스트를 관리 할 수있는 편리한 방법을 제공합니다. SQL 문을 매개 변수화하는 것은 구문 오류를 방지하고 악의적 인 SQL 주입으로부터 사용자를 보호하는 데 도움이되므로 매우 중요합니다. 매개 변수화의 또 다른 이점은 매개 변수화 된 SQL을 함수 외부에 정의하여 함수 자체를 훨씬 쉽게 읽을 수 있다는 것입니다.
adduser
함수에서이 방법을 구현하는 방법은 다음과 같습니다. 첫째, 매개 변수화 된 쿼리로 SQL 문을 다시 작성 :
cmd1 = """
INSERT INTO `wp_users`
(`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_status`)
VALUES
(%s, %s, MD5(%s), %s, %s, %s);
"""
나는 내가 매우 빠르게 복사 파이썬 소스 코드와 MySQL 워크 벤치 또는 명령 행 사이에 내 SQL을 붙여 넣을 수 있습니다 자신의 라인에 문을 넣어. 좋아하는 스타일을 사용할 수 있습니다. 주의해야 할 중요한 점은 각 사용자 입력 값에 대해 %s
자리 표시자가 있다는 것입니다. execute
함수는 이스케이프 특수 문자, 문자열 따옴표 등을 처리하므로 처리 할 필요가 없습니다.
이제, 기능은 훨씬 더 간단 할 수있다 :
는
def adduser(domain_ip, username, password):
db = MySQLdb.connect(host=domain_ip, user=username, passwd=password, db="yogatrai")
args = (5, 'demo1', 'demo1demo', 'firstname lastname', '[email protected]', 0)
with db as cur:
cur.execute(cmd1, args)
MySQLdb.connect
에 db
매개 변수는 USE
문을 대체하고 with
컨텍스트 매니저는 트랜잭션을 처리한다. with
블록 내에 예외가 발생하면 트랜잭션이 롤백됩니다. 그렇지 않은 경우 with
블록이 종료되면 커밋됩니다. MySQLdb와의 트랜잭션 관리에 대한이 접근법에 대해 더 자세히 말하면 in another answer입니다.
최종 코드는 다르게 보일 것입니다. 그러나 테스트 목적으로는 위의 코드가 잘 작동합니다. 내 유일한 다른 조언은 cmd1
보다 의미있는 이름을 사용하십시오. 내 SQL 문을 상수로 취급하고 싶습니다. 따라서이 이름을 INSERT_USER
과 같이 지정하십시오. 중요한 것은 명확하고 일관성있는 것입니다.