인터페이스, DB API, 클라우드 데이터 베이스/온프레미스(on-premise) 데이터 베이스, sqlite3, connect/cursor
Python Enhancement Proposals
의 약자다.PEP8
이라는 것도 있는데, 이건 code format에 관한 것으로 어떻게 하면 코드를 깔끔하고 효율적으로 쓸 수 있을지에 대한 문서라고 한다. 나중에 함 봐바야지)이건 중요하니까 별도로 빼서 기록해둔다.
import sqlite3
conn = sqlite3.connect('DBname')
cur = conn.cursor()
cursor.execute
=> 가장 기본적인 DB 소통 방식.
conn.commit()
=> 어제까지와 마찬가지로 commit을 해줘야 DB에 최종 반영이 된다!!!!!!!!!
cursor.fetchone, cursor.fetchall
=> 데이터 조회할 때 쓸 수 있는 거다. 오늘 한 번도 안 써보긴 했다.
=> cur.execute("SELECT * FROM test_table;") 이렇게 조회하려고 하면 안된다.
=> one은 하나만, all은 전부 넘겨준다.
==> one 연속해서 3번 적으면 첫 값 하나만 3번 보여주는게 아니라 차례대로 3개의 값을 조회할 수 있는 건 참고!! 헷갈릴 수 있겠어.
서비스://유저_이름:유저_비밀번호@호스트:포트번호/경로
기억!import psycopg2
conn = psycopg2.connect(
host="서버 호스트 주소",
database="데이터베이스 이름",
user="유저 이름",
password="유저 비밀번호")
실습한 내용 중에 기억하고 싶은 것만 옮겨둔다. (오늘은 VSCode만 사용)
문제
DB_API
이라는 이름의 sqlite 데이터베이스를 과제의 setup.cfg가 있는 위치에 생성한다.- 데이터베이스에는
Albums_Part1
,Albums_Part2
,Albums_Part3
라는 테이블이 각각 생성되어야한다.- 각 테이블에 주어진 list_data, dictionary_data, json_data를 입력해야 한다.
Albums_Part1
# 입력해야 하는 데이터 형태는 이랬다.
list_data = [
["AlbumId","Title","ArtistId"],
[1,"For Those About To Rock We Salute You",1],
[2,"Balls to the Wall",2],
[3,"Restless and Wild",2],
[4,"Let There Be Rock",1],
[5,"Big Ones",3],
[6,"Jagged Little Pill",4],
[7,"Facelift",5],
[8,"Warner 25 Anos",6],
[9,"Plays Metallica By Four Cellos",7],
[10,"Audioslave",8]
]
conn = sqlite3.connect('DB_API.db') #db가 없는 경우 새로 생성된다.
cur = conn.cursor()
cur.execute("DROP TABLE IF EXISTS Albums_Part1;")
cur.execute("""CREATE TABLE Albums_Part1(
AlbumId INTEGER NOT NULL,
Title NVARCHAR(160),
ArtistId INTEGER,
PRIMARY KEY (AlbumId)
)
""")
for i in list_data[1:]:
cur.execute("INSERT INTO Albums_Part1(AlbumId, Title, ArtistId) VALUES (?, ?, ?)", i)
conn.commit();
Albums_Part2
# 주어진 데이터는 다음과 같았다.
dictionary_data = {
"Columns":["AlbumId", "Title", "ArtistId"],
"1" : ["For Those About To Rock We Salute You",1],
"2" : ["Balls to the Wall",2],
"3" : ["Restless and Wild",2],
"4" : ["Let There Be Rock",1],
"5" : ["Big Ones",3],
"6" : ["Jagged Little Pill",4],
"7" : ["Facelift",5],
"8" : ["Warner 25 Anos",6],
"9" : ["Plays Metallica By Four Cellos",7],
"10" : ["Audioslave",8]
}
conn = sqlite3.connect('DB_API.db')
cur = conn.cursor()
cur.execute("DROP TABLE IF EXISTS Albums_Part2;")
cur.execute("""CREATE TABLE Albums_Part2(
AlbumId INTEGER NOT NULL,
Title NVARCHAR(160),
ArtistId INTEGER,
PRIMARY KEY (AlbumId)
)
""")
for i in list(dictionary_data.items())[1:]:
k = i[0]
v1 = i[1][0]
v2 = i[1][1]
cur.execute("INSERT INTO Albums_Part2(AlbumId, Title, ArtistId) VALUES (?, ?, ?)", (k,v1, v2))
conn.commit();
Albums_Part3
# 주어진 데이터는 다음과 같았다.
json_data = {
"DATA": [
{
"AlbumId" : 1,
"Title" : "For Those About To Rock We Salute You",
"ArtistId" : 1
},
{
"AlbumId" : 2,
"Title" : "Balls to the Wall",
"ArtistId" : 2
},
{
"AlbumId" : 3,
"Title" : "Restless and Wild",
"ArtistId" : 2
},
{
"AlbumId" : 4,
"Title" : "Let There Be Rock",
"ArtistId" : 1
},
{
"AlbumId" : 5,
"Title" : "Big Ones",
"ArtistId" : 3
},
{
"AlbumId" : 6,
"Title" : "Jagged Little Pill",
"ArtistId" : 4
},
{
"AlbumId" : 7,
"Title" : "Facelift",
"ArtistId" : 5
},
{
"AlbumId" : 8,
"Title" : "Warner 25 Anos",
"ArtistId" : 6
},
{
"AlbumId" : 9,
"Title" : "Plays Metallica By Four Cellos",
"ArtistId" : 7
},
{
"AlbumId" : 10,
"Title" : "Audioslave",
"ArtistId" : 8
}
]}
conn = sqlite3.connect('DB_API.db')
cur = conn.cursor()
cur.execute("DROP TABLE IF EXISTS Albums_Part3;")
cur.execute("""CREATE TABLE Albums_Part3(
AlbumId INTEGER NOT NULL,
Title NVARCHAR(160),
ArtistId INTEGER,
PRIMARY KEY (AlbumId)
)
""")
for i in range(0,10) :
data = json_data["DATA"]
t = list(data[i].items())
v1 = t[0][1]
v2 = t[1][1]
v3 = t[2][1]
cur.execute("INSERT INTO Albums_Part3(AlbumId, Title, ArtistId) VALUES (?, ?, ?)", (v1,v2, v3))
conn.commit();
import jason, loads()
를 써봤는데 계속 오류가 났다. 여하간 다른 방법으로 풀긴했지만, range 범위가 지정되어있다보니 일반화해서 쓰긴 힘들겠구나, 어떻게 하면 좋을까 싶어 과제 제출이랑 깃헙 PR까지 마치고, 다른 분의 코드도 살펴보았다. 아래와 같이도 가능하더만?!! 기억하자.for data in json_data['DATA']:
cur.execute("""INSERT INTO ALbums_Part3 (AlbumId, Title, ArtistId) VALUES (?, ?, ?);""",
(data["AlbumId"], data["Title"], data["ArtistId"]))
오늘 실습은
고생 많았어~~ 셀프 칭찬해!