1. 테이블이 데이타 한개 추가하기
데이타를 추가 할때는 직접값을 주면 데이타내의 따옴표처리나
데이타 형식을 맟춰서 입력해야 한다
place holder (?표로 위치지정) 을 사용하면 sqlite가 자동으로 위내용을 처리함.
데이타는 리스트나 튜플로 넘겨줌
추가된 데이타의 id는 int 타입 primary 키와 AUTOINCREMENT 가 설정된 경 우에만 유효
def insertOneRow( dbName, tableName, fields, data ):
# fields = [ "question_id", "content", "create_date" ]
# data = [ 1, "acd" , "2022-11-18 12:14:13" ]
sql = "INSERT INTO %s (%s) VALUES(%s)"%\
(tableName, ",".join(fields), ("?,"*len(fields))[:-1])
con = sqlite3.connect( dbName )
cur = con.cursor()
cur.execute( sql , data )
# int 타입 primary 키와 AUTOINCREMENT 가 설정된 경우에만 lastrowid 가 유효
last_id = cur.lastrowid
con.commit()
cur.close() ; con.close()
return last_id
2. 테이블에 데이타 여러개 추가하기
데이타를 여러개 추가 할때 executemany 를 사용하면 쿼리문을 재컴파일
하지 않으므로 속도가 비약적으로 향상 된다.
def insertManyRow( dbName, tableName, fields, datas ):
# fields = [ "question_id", "content" ]
# datas = [ [ 1, "acd" ], [ 2, "ssg"], ...]
sql = "INSERT INTO %s (%s) VALUES(%s)"%\
(tableName, ",".join(fields), ("?,"*len(fields))[:-1])
con = sqlite3.connect( dbName )
cur = con.cursor()
cur.executemany( sql , datas )
con.commit()
cur.close() ; con.close()
3. 테이블내 데이타 업데이트
특정조건의 데이타를 한개만 수정(업데이트) 할때 사용
조건데이타를 잘못주면 원치 않는 데이타까지 수정 될수 있으므로 조건데이타
항상 확인한후 실행 할것
def updateOneRow( dbName, tableName, where, fields, data ):
# where = "id=4"
# fields = [ "question_id", "content", "create_date" ]
# data = [ 1, "acd" , "2022-11-18 12:14:13" ]
sql = "UPDATE %s SET "%(tableName)
for field in fields:
sql += "%s=?,"%(field)
sql = sql[:-1]
sql += " WHERE %s"%(where)
con = sqlite3.connect( dbName )
cur = con.cursor()
cur.execute( sql , data )
con.commit()
cur.close() ; con.close()
4.테이블내 데이타 삭제
조건에 맞는 모든 데이타를 삭제 하므로
조건문을 잘못주면 원치 않는 데이타까지 삭제 되므로 조건문을
항성 확인한후 실행 할것
def deleteRow( dbName, tableName, where ):
# where = "id=4"
sql = "DELETE FROM %s WHERE %s"%(tableName, where)
con = sqlite3.connect( dbName )
cur = con.cursor()
cur.execute( sql )
con.commit()
cur.close() ; con.close()
del cur ; del con
5. 리턴값이 없는 sql문 실행
update 나 delete 등 결과값울 받오오지 않을때 쿼리문 전체를 보내서 실행
def executeSqlNoReturn( dbName, sql ):
con = sqlite3.connect( dbName )
con.execute( sql )
con.commit()
con.close()
6. 궈리결과를 튜플로 받아오기
결과값을 수정하려면 튜풀을 리스트로 형변환 해야함.
def get_queryed_list( dbName, sql ):
con = sqlite3.connect( dbName )
cur = con.cursor()
cur.execute( sql )
data = cur.fetchall()
con.commit()
cur.close() ; con.close()
del cur ; del con
return len(data),data
7. 쿼리결과를 칼람이름과 값 쌍으로 받아오기
연결(con) 의 row설정에 ( con.row_factory) 을 sqlite3.rRow
로 하면 결과값을 칼람이름과 값 쌍으로 받아 올수 있다. (sqlite row object)
사전(dict) 처럼 값을 읽을수 있다. 단 값수정이나 키추가는 불가.
def get_queryed_sqlobj( dbName, sql ):
con = sqlite3.connect( dbName )
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.execute( sql )
qd = cur.fetchone()
cur.close() ; con.close()
del cur ; del con
return qd # object
8. 리턴값을 python object 로 받기(1개)
쿼리 결과를 sqlite3 row object 를 받아 오면 키를 추가 할수 없다.
키를 추가하거나 값을 변경 할수 있게 sqlite3 row object 를 파이션 객체로 변환
SqliteRow object 를 python Object 로 설정하는 클래스를 만들어 호출
class SqliteRowToObject:
def __init__(self, row=None):
if row is not None:
for key in row.keys():
setattr(self, key, row[key])
def get_queryed_obj( dbName, sql ):
con = sqlite3.connect( dbName )
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.execute( sql )
qd = cur.fetchone()
cur.close() ; con.close()
del cur ; del con
if qd:
qd = SqliteRowToObject(qd)
return qd # object
9.리턴값을 python object 로 받기(여러개,리스트)
쿼리 결과를 파이썬 object 리스트로 받기: [ obj,obj,...]
ef get_queryed_obj_list( dbName, sql ):
con = sqlite3.connect( dbName )
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.execute( sql )
datas = []
for row in cur:
datas.append(SqliteRowToObject(row))
cur.close() ; con.close()
del cur ; del con
return len(datas),datas
5 | 원격터미널 putty | 관리자 | 150 | 2025-01-30 |
4 | sqlite 입력,수정,삭제함수를 만들기 | 관리자 | 39 | 2025-01-30 |
3 | 파이썬 서버 선택 - NginX, Gunicorn ,Flask | 관리자 | 52 | 2025-01-30 |