sqlite 입력,수정,삭제함수를 만들기

목록으로

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

 

 



관리자
25-01-30 15:39
댓글 추가 ..
0 개의 답변이 있습니다.
Sqlite 이론


5 원격터미널 putty 관리자 150 2025-01-30
4 sqlite 입력,수정,삭제함수를 만들기 관리자 39 2025-01-30
3 파이썬 서버 선택 - NginX, Gunicorn ,Flask 관리자 52 2025-01-30