🚀 Python과 PyMySQL로 MySQL 데이터베이스 다루기
📌 3. 데이터 조회 (SELECT)
MySQL 데이터베이스에서 데이터를 조회하는 예시입니다:
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM table_name"
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
print(row)
finally:
connection.close()
✅ Tip: fetchall()은 모든 데이터를 가져옵니다. 특정 개수만 가져오고 싶다면 fetchone() 또는 fetchmany(size)를 사용하세요.
📌 4. 데이터 삽입 (INSERT)
데이터를 삽입하는 예시는 다음과 같습니다:
try:
with connection.cursor() as cursor:
sql = "INSERT INTO table_name (column1, column2) VALUES (%s, %s)"
cursor.execute(sql, ('data1', 'data2'))
connection.commit()
finally:
connection.close()
✅ Tip: 데이터 삽입 후에는 반드시 commit()을 호출하여 변경 사항을 데이터베이스에 저장하세요.
📌 5. 데이터 수정 (UPDATE)
기존 데이터를 수정하는 방법은 다음과 같습니다:
try:
with connection.cursor() as cursor:
sql = "UPDATE table_name SET column1=%s WHERE column2=%s"
cursor.execute(sql, ('new_data', 'criteria'))
connection.commit()
finally:
connection.close()
✅ Tip: 정확한 조건(WHERE)을 설정하여 의도치 않은 데이터를 수정하지 않도록 주의하세요.
📌 6. 데이터 삭제 (DELETE)
데이터를 삭제하는 예시 코드입니다:
try:
with connection.cursor() as cursor:
sql = "DELETE FROM table_name WHERE column_name=%s"
cursor.execute(sql, ('criteria',))
connection.commit()
finally:
connection.close()
✅ Tip: 삭제는 되돌릴 수 없으니 항상 삭제 조건을 신중히 선택하세요.
📌 예제: CRUD 전체 과정 (app.py)
기본 버전
import pymysql
def main():
connection = pymysql.connect(host='localhost',
user='username',
password='password',
db='database_name',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
# SELECT
with connection.cursor() as cursor:
cursor.execute("SELECT * FROM table_name")
result = cursor.fetchall()
print("SELECT 결과:")
for row in result:
print(row)
# INSERT
with connection.cursor() as cursor:
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ('data1', 'data2'))
connection.commit()
print("INSERT 수행됨.")
# UPDATE
with connection.cursor() as cursor:
cursor.execute("UPDATE table_name SET column1=%s WHERE column2=%s", ('new_data', 'criteria'))
connection.commit()
print("UPDATE 수행됨.")
# DELETE
with connection.cursor() as cursor:
cursor.execute("DELETE FROM table_name WHERE column_name=%s", ('criteria',))
connection.commit()
print("DELETE 수행됨.")
finally:
connection.close()
if __name__ == "__main__":
main()
📌 리팩토링 버전 (app.py)
중복을 줄이고 코드의 가독성을 높인 리팩토링 버전입니다.
import pymysql
def execute_query(connection, query, args=None):
with connection.cursor() as cursor:
cursor.execute(query, args or ())
if query.strip().upper().startswith('SELECT'):
return cursor.fetchall()
connection.commit()
def main():
connection = pymysql.connect(host='localhost',
user='username',
password='password',
db='database_name',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
# SELECT
result = execute_query(connection, "SELECT * FROM table_name")
print("SELECT 결과:")
for row in result:
print(row)
# INSERT
execute_query(connection, "INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ('data1', 'data2'))
print("INSERT 수행됨.")
# UPDATE
execute_query(connection, "UPDATE table_name SET column1=%s WHERE column2=%s", ('new_data', 'criteria'))
print("UPDATE 수행됨.")
# DELETE
execute_query(connection, "DELETE FROM table_name WHERE column_name=%s", ('criteria',))
print("DELETE 수행됨.")
finally:
connection.close()
if __name__ == "__main__":
main()
✅ 리팩토링 Tip: 함수로 쿼리를 실행하는 로직을 묶으면 중복을 피하고 유지보수도 쉬워집니다!