본문 바로가기

python

DB 연결 - select, insert, update, delete 기본

 

코드 전체보기

# 원격 데이터베이스 연동 프로그램
# pip install mysqlclient
import MySQLdb

# conn = MySQLdb.connect(host = '127.0.0.1', user = 'root', password='123', database='test')
# print(conn)
# conn.close()

# sangdata table과 연동
config = {
    'host':'127.0.0.1',
    'user':'root',
    'password':'123',
    'database':'test',
    'port':3306,
    'charset':'utf8',
    'use_unicode':True
}

try:
    conn = MySQLdb.connect(**config)
    # print(conn)
    cursor = conn.cursor()
    
    """
    # insert
    # 숫자는 ''처리를 해도 되고 안해도 된다.
    # commit을 해야 DB에 저장된다. commit 안하면 임시데이터로 사라진다.
    # 해당 예시를 2회 commit할 경우 code primary key로 오류
    
    # sql = "insert into sangdata(code,sang,su,dan) values(10,'신상1',5,'5000')"
    # cursor.execute(sql)
    
    sql = "insert into sangdata values(%s,%s,%s,%s)"
    sql_data = '11', '아아', 12, 5500
    count = cursor.execute(sql, sql_data)
    # print(count)
    
    conn.commit()
    """
    
    """
    # update
    sql = "update sangdata set sang=%s, su=%s where code=%s"
    sql_data = ('파이썬',50,11)
    count = cursor.execute(sql,sql_data)
    print(count)
    conn.commit()
    """
    
    """
    # delete
    code = '11'
    # secure coding guide에 위배, sql injection 해킹에 취약
    # sql = "delete from sangdata where code=" + code
    # sql = "delete from sangdata where code='{0}'".format(code)
    # cursor.execute(sql)
    sql = "delete from sangdata where code=%s"
    cursor.execute(sql, (code,))
    conn.commit()
    """
    
    # select
    sql = "select code,sang,su,dan from sangdata"
    cursor.execute(sql)
    
    # 방법1
    for data in cursor.fetchall():
        # print(data)
        print('%s %s %s %s'%data)
        
    # 방법2
    print()
    for r in cursor:
        # print(r)
        print(r[0], r[1], r[2], r[3])
    
    # 방법3
    # 가독성이 좋음
    print()
    for (code,sang,su,dan) in cursor:
        print(code,sang,su,dan)
    
    # 방법3-1
    # 사실 매개변수는 칼럼명일 필요는 없다.
    print()
    for (a,품명,su,dan) in cursor:
        print(a,품명,su,dan)
        
        
except Exception as e:
    print('err :',e)
finally:
    cursor.close()
    conn.close()

 

sql 시작 기본 형태

# 원격 데이터베이스 연동 프로그램
# pip install mysqlclient
import MySQLdb

# conn = MySQLdb.connect(host = '127.0.0.1', user = 'root', password='123', database='test')
# print(conn)
# conn.close()

# sangdata table과 연동
config = {
    'host':'127.0.0.1',
    'user':'root',
    'password':'123',
    'database':'test',
    'port':3306,
    'charset':'utf8',
    'use_unicode':True
}

try:
    conn = MySQLdb.connect(**config)
    # print(conn)
    cursor = conn.cursor()
    
except Exception as e:
    print('err :',e)
finally:
    cursor.close()
    conn.close()

 

select

    # select
    sql = "select code,sang,su,dan from sangdata"
    cursor.execute(sql)
    
    # 방법1
    for data in cursor.fetchall():
        # print(data)
        print('%s %s %s %s'%data)
        
    # 방법2
    print()
    for r in cursor:
        # print(r)
        print(r[0], r[1], r[2], r[3])
    
    # 방법3
    # 가독성이 좋음
    print()
    for (code,sang,su,dan) in cursor:
        print(code,sang,su,dan)
    
    # 방법3-1
    # 사실 매개변수는 칼럼명일 필요는 없다.
    print()
    for (a,품명,su,dan) in cursor:
        print(a,품명,su,dan)

 

insert

숫자는 ''처리를 해도 되고 안해도 된다.
commit을 해야 DB에 저장된다. commit 안하면 임시데이터로 사라진다.
해당 예시를 2회 commit할 경우 code primary key로 오류

    # insert
    
    # 방법1
    sql = "insert into sangdata(code,sang,su,dan) values(10,'신상1',5,'5000')"
    cursor.execute(sql)
    
    # 방법2
    sql = "insert into sangdata values(%s,%s,%s,%s)"
    sql_data = '11', '아아', 12, 5500
    count = cursor.execute(sql, sql_data)
    
    # print(count)
    
    conn.commit()

 

update

    # update
    sql = "update sangdata set sang=%s, su=%s where code=%s"
    sql_data = ('파이썬',50,11)
    count = cursor.execute(sql,sql_data)
    print(count)
    conn.commit()

 

delete

    # delete
    code = '11'
    
    # 방법1 비추천
    secure coding guide에 위배, sql injection 해킹에 취약
    sql = "delete from sangdata where code=" + code
    cursor.execute(sql)
    
    # 방법2
    sql = "delete from sangdata where code='{0}'".format(code)
    cursor.execute(sql)
    
    # 방법3
    sql = "delete from sangdata where code=%s"
    cursor.execute(sql, (code,))
    conn.commit()

'python' 카테고리의 다른 글

socket - 기본 구조  (0) 2022.10.12
DB 연결 - 기본 db, sql문 예시  (0) 2022.10.12
DB - sqlite  (0) 2022.10.11
file - 파일에서 특정 단어를 포함하는 줄만 출력(주소 출력기)  (1) 2022.10.11
file - file + with, pickle  (0) 2022.10.11