import mysql.connector
from faker import Faker
import random # 파이선 기본 모듈
# 1) mysql 연결 설정
db_connection = mysql.connector.connect(
host='localhost',
user='root',
password='dudgus724',
database='testdatabase'
)
뎅
# 2) mysql 연결
cursor = db_connection.cursor()
faker = Faker()
print(db_connection)
# users 데이터 생성
for _ in range(100): # _ 는 굳이 사용하진 않고 100번 반복할거다.
username = faker.user_name()
email = faker.email()
sql = "INSERT INTO users(username, email) VALUES(%s, %s)", (username, email)
cursor.execute(sql)
db_connection.commit()
cursor.close()

python의 Random과 Faker 모듈을 사용해 데이터를 생성하고 mysql과 연동한 뒤 데이터를 insert 하는 상황.
db와의 연동이 잘 되었는지 까지는 확인했고, 코드에는 딱히 오타나 문제가 없었다.
에러 메세지를 보니 excute() 메서드의 호출 중에 문제가 생긴 것이 맞는 것 같은데, 'tuple' 타입 개체에 '인코드' 속성이 없다?
이해할 수 없어서 바로 구글링...
검색 결과 *DB SQL 인젝션 공격(웹 애플리케이션과 데이터베이스 간의 연동에서 생기는 취약점으로, 공격자가 입력폼에 악의적으로 조작된 쿼리를 삽입하여 데이터베이스 정보를 불법적으로 열람하거나 조작하는 것.) 을 방지하기 위해 직접 문자열에 데이터를 동적으로 코드하는 것은 지양해야 한다고 나와있었다.
따라서 코드를 수정해보면...
코드를 import mysql.connector
from faker import Faker
import random # 파이선 기본 모듈
# 1) mysql 연결 설정
db_connection = mysql.connector.connect(
host='localhost',
user='root',
password='',
database='testdatabase'
)
# 2) mysql 연결
cursor = db_connection.cursor()
faker = Faker()
print(db_connection)
# users 데이터 생성
for _ in range(100): # _ 는 굳이 사용하진 않고 100번 반복할거다.
username = faker.user_name()
email = faker.email()
sql = "INSERT INTO users(username, email) VALUES(%s, %s)"
param = (username, email)
cursor.execute(sql, param)
db_connection.commit()
cursor.close()입력하세요
위와 같이 excute()를 호출할 때, 동적 할당 대상이 되는 쿼리와 동적 할당 하려는 데이터를 따로 두어 호출을 해야한다.