왜 마지막에 'asdf':'asdf'
부분은 반영되지 않은걸까.
에러도 나지 않고.
존재하지 않는 컬럼이라서 그런걸까?
중복되는것 중 마지막 것이 할당된 것을 알 수 있다.. (왜!??)
데이터 테이블 전체를 바로바로 확인하기가 힘드니까 너무 답답하다.....
여기서도 commit 을 안해주면 반영이 안된다.
lastrowid 는 뭐지..?
생각났다. 마지막 row 번호를 알려준다. 하지만, 위의 상황처럼 commit 을 하기 전에 close 를 해버리면 없어질 번호니 맹신금지라고 한거다.
원래 fetchall()
은 다 뽑아줘야하는데 뒤에 인덱싱을 붙이니 마지막 하나만 보인다.
응용가능^^
con을 열어서 지금까지 내가 했던 실행 기록을 보여준다.
iterdump 를 하면 자동 commit 이 되는 줄 알았는데...
그래서 테스트1,2,3 insert 한 컬럼이 존재하는줄 알았다.
하지만 update 구문은 반영되지 않았다.
insert 구문으로 테스트를 해봤는데, 자동 커밋은 되지 않는걸 확인할수 있었다...
그렇다면, 더더욱 의문인게 create 하고 insert 했던 구문은 왜 남아있었던 거지???
너무 짜릿하다....
결국, commit 의 기준은 iterdump 도 아니고...
insert 구문이라서도 아니고...
executescript 라는 한번에 여러 sql 구문을 실행해주는 명령어 안에 create 라는 auto commit 이 수행되는 쿼리가 존재하면 같이 한번에 실행되기에 덩달아 자동커밋이 되는 것 같다!!
con = sqlite3.connect('sns.db')
cur = con.cursor()
cur.executescript('''
CREATE TABLE POST(
PK INTEGER PRIMARY KEY,
CONTENT TEXT
);
CREATE TABLE HASHTAG(
PK INTEGER PRIMARY KEY,
COUNT INTEGER DEFAULT 0,
NAME TEXT
);
CREATE TABLE POSTTAG(
PPK INTEGER NOT NULL,
HPK INTEGER NOT NULL
);
''')
data = {'tag':'ORM'}
cur.execute('''
SELECT COUNT(*) FROM HASHTAG
WHERE NAME =:tag
''', data)
cur.fetchone()[0]
if cur.fetchone()[0] == 0:
cur.execute('''
INSERT INTO HASHTAG(NAME) VALUES (:tag)
''', data)
con.commit()
cur.execute('''
SELECT PK
FROM HASHTAG
WHERE NAME =:tag
LIMIT 0,1
''', data)
PK = cur.fetchone()[0]
data1 = {'content':'본문1', 'tags':['Python']}
cur.execute('INSERT INTO POST(CONTENT) VALUES(:content)', data1)
con.commit()
PPK = cur.lastrowid
cur.execute('SELECT * FROM POST')
cur.fetchall()
for tag in data1['tags']:
data2 = {'tag':tag}
cur.execute('''
SELECT COUNT(*) FROM HASHTAG
WHERE NAME =:tag
''', data2)
if cur.fetchone()[0] == 0:
cur.execute('''
INSERT INTO HASHTAG(NAME) VALUES(:tag)
''', data2)
con.commit()
cur.execute('''
SELECT PK
FROM HASHTAG
WHERE NAME =:tag
LIMIT 0,1
''', data2)
TPK = cur.fetchone()[0]
cur.execute('INSERT INTO POSTTAG VALUES(?,?)', [PPK, TPK])
cur.execute('''
UPDATE HASHTAG SET COUNT = COUNT +1
WHERE PK = ?
''', [TPK])
con.commit()
와.. 코드를 한줄한줄 곱씹으면서 내가 하고 싶은 방향도 가보고 하니, 너무 재밌다!!
선생님의 코드 짜는 여러가지 방식도 너무 재밌다ㅠㅠ 시간만 나에게 주어진다면...