위의 두 방법의 차이점 일반적으로는 new int[]형태를 더 많이 쓰인다 왜냐하면 보통 다른 파일이나 데이터베이스의 내용을 가져오기 때문에 변수갯수가 정해져있다. 배열을 사용하려면 항상 크기를 미리 알아야한다. 만약 배열의 크기를 모른다면 쓸 수 있는 가장 큰 수를 적어주면되지만 대신 메모리를 많이 잡아먹는다. 그래서 사용하는 것이 Collection(컬렉션)이다
데이터베이스는 커서의 위치가 중요하다 데이터를 불러오고 난 다음에 커서는 해당 데이터 뒤에 위치하기때문이다
1 2 3 4 5 6 7 8
# 1개 로우 선택 print('One -> \n', c.fetchone())
# 지정 로우 선택 : size위의 숫자로 로우 갯수를 선택 print('Three -> \n', c.fetchmany(size=3))
# 전체 로우 선택 print('All -> \n', c.fetchall())
위의 명령어를 활용한 예시는 아래 이미지와 같다
터미널에서 볼 수 있듯이 1개 로우 명령어 뒤라서 커서는 1번 로우를 지난 2번로우 앞에 있다 그리고 size=3인 로우를 출력하니 2,3,4번 로우가 터미널에 출력되었음을 알 수 있다
위의 상태에서 전체 로우 print(‘All -> \n’, c.fetchall()) 명령어를 입력하면 어떻게 될까? 커서는 지금 4번로우 뒤에 위치해있기때문에 마지막 로우인 5번 데이터만 출력된다
만약 위의 상태에서 print(‘All -> \n’, c.fetchall())를 한번 더 호출하면 어떻게 될까? 커서의 위치는 마지막 로우인 5번 뒤에 있다. 따라서 호출해도 [] 빈리스트만 터미널에 출력된다.
그렇다면 처음 1번 로우를 호출하고 싶을때는 어떻게 할 수 있을까? 바로 순회하면 된다
2. 순회
순회에는 3가지방법이 있다.
순회 : 변수선언 후 for in 반복문 사용 데이터조회 명령어 c.execute(‘SELECT * FROM users’) 뒤에 실행해야 출력된다
1 2 3
rows = c.fetchall() for row in rows: print('retrieve1 >', row) # 조회 없음
순회 : 변수선언 없이 for in 반복문 바로 사용 데이터조회 명령어 c.execute(‘SELECT * FROM users’) 뒤에 실행해야 출력된다 간편하기때문에 제일많이 사용된다
1 2
for row in c.fetchall(): print('retrieve2 >', row) # 조회 없음
순회 execute(“SELECT * FROM users)는 users에 있는 전체 데이터를 조회하는 명령어이다 따라서 fetchall() 명령어와 동일한 결과값을 가진다. 데이터조회 명령어 c.execute(‘SELECT * FROM users’) 까지 포함된 명령어로 데이터조회명령어가 따로 필요없다 코드가 길어져서 가독성이 떨어지는 지는 단점이 있다. “ORDER BY id desc” 명령어를 넣어주면 역순출력이 된다
1 2
for row in c.execute("SELECT * FROM users ORDER BY id desc"): print('retrieve3 > ', row)
순회1번과 순회2번은 함께 쓰일수없기때문에 순회2번과 순회3번의 출력값을 아래 이미지와 같다
3. WHERE Retrieve
6가지 방법이 있고 핵심이므로 꼭 다 알고 있어야한다.
WHERE Retrieve1 튜플형태로 3번로우인 Lee를 출력 fetchone()에서 3번 로우 하나만 불러왔기때문에 그 다음 명령어로 fetchall()로 전체를 불러와도 [] 빈 리스트만 출력된다
1 2 3 4
param1 = (3,) c.execute('SELECT * FROM users WHERE id=?', param1) print('param1', c.fetchone()) print('param1', c.fetchall())
WHERE Retrieve2 튜플형태로 1번로우인 Kim을 출력 %s :문자열형, %d:정수형, %f: 실수형 fetchone()에서 1번 로우 하나만 불러왔기때문에 그 다음 명령어로 fetchall()로 전체를 불러와도 [] 빈 리스트만 출력된다
1 2 3 4
param2 = 1 c.execute("SELECT * FROM users WHERE id='%s'" % param2) print('param2', c.fetchone()) print('param2', c.fetchall())
WHERE Retrieve3 이번엔 딕셔너리형태로 1번 로우출력 id= 뒤에 :Id를 넣어준뒤 컴마찍고 딕셔너리형태로 {“Id”: 1} 첫번째로우를 호출하면 된다
1 2 3
c.execute("SELECT * FROM users WHERE id= :Id", {"Id": 1}) print('param3', c.fetchone()) print('param3', c.fetchall())
WHERE Retrieve4 리스트형태로 파라미터 2개를 받아서 1번로우와 4번로우 출력 파라미터 여러가지를 가져오려면 IN(?,?)로 넣으면 된다 이젠 한개가 아니니까 fetchone()은 쓸 수 없고 fetchall()로 출력하면 된다
1 2 3
param4 = (1, 4) c.execute('SELECT * FROM users WHERE id IN(?,?)', param4) print('param4', c.fetchall())
WHERE Retrieve5 위와 똑같은 결과값이지만 다르게 표현할 수 있다 물음표대신 정수값($d)을 넣어주면 된다 간단하기때문에 많이 사용한다
1 2
c.execute("SELECT * FROM users WHERE id In('%d','%d')" % (1, 4)) print('param5', c.fetchall())
WHERE Retrieve6 딕셔너리형태로 1번과 4번로우 출력 OR 사용
1 2
c.execute("SELECT * FROM users WHERE id= :id1 OR id= :id2", {"id1": 1, "id2": 4}) print('param6', c.fetchall())
지금까지 id를 이용했지만 username, date등을 이용해서도 출력할수있다
4. Dump 출력
데이터베이스 백업 시 중요하다 아래 명령어를 실행하면 새로운 dump.sql이라는 파일이 형성되고 그 안에 작성한 데이터테이블이 백업된다. 이를 활용하여 sql에 붙여넣으면 다른 컴퓨터나 환경에서도 데이터사용가능하다 실무에서 흔히 ‘덤프떠와’ 라고 말한다.
with문을 사용하면 자동으로 close()를 해줘서 편리하다
with open() as f: 를 실행했으므로 f.close()가 자동으로 되었고
with conn: 을 실행했으므로 conn.close()가 자동으로 되었다
1 2 3 4 5
with conn: with open('본인이 원하는 경로/dump.sql', 'w') as f: for line in conn.iterdump(): f.write('%s\n' % line) print('Dump Print Complete.')
위의 예제를 차근차근 보자 with open(작성한 파일을 저장할장소/저장할 파일명, ‘w’(작성한다는는 의미), newline=’’) as f:
newline=’’ 이 의미는 이 부분이 없으면 한 줄씩 띄어쓰기로 for문을 순회하면서 데이터가 자동저장된다 하지만 데이터 양이 많을수록 용량도 커지고 쓸데없이 불편할 수 있다.
1 2 3 4 5 6 7 8 9 10 11
1,2,3
4,5,6
7,8,9,
10,11,12
13,14,15
16,17,18
그래서 ‘’빈칸을 넣어서 띄어쓰기를 없애는 것이다 newline=’’을 적용하면 아래와 같이 결과값이 출력된다
writerow()와 writerows()의 차이점
writerow()는 한줄씩 띄어쓰기하여 입력된다 -> for문을 썼기에 순회하면서 전체 내용이 출력되었다.
writerows() 한줄씩이 아닌 전체데이터가 입력된다.(for문 반복없이 한번에 입력)
한줄씩 순회하면서 입력 방법(writerow)와 한꺼번에 전체데이터를 입력하는 방법(writerows)은 각각의 장점이 있다 예시로 회원가입목록에서 1950년생이하는 빼고 데이터를 출력하고싶을때 if조건문으로 필터링을 걸어줘서 writerow이 유용하게 쓰인다
2. 엑셀 쓰기 읽기
엑셀을 처리하는 오픈소스 : openpyxl, xlsxwriter, xlrd, xlwt, xlutils 여러가지 방법이 있지만 pandas를 가장 많이 사용한다 그 이유는 pandas는 최다사용오픈소스인 openpyxl, 랭킹 1위인 xlrd를 내부적으로 만능으로 사용할 수 있기때문이다
pandas를 이용하기 위해서는 아래 3가지를 다운로드해줘야한다 1. pip install xlrd 2. pip install openpyxl 3. pip install pandas
파이썬 인강 : 데이터베이스 연동(SQLite)
SQLite는 기본적으로 설치가 되어있다. 따라서 따로 설치할 필요없이 바로 import하면 된다
<h2> 자신을 4가지 관점으로 정의</h2> <dl> <dt>E</dt> <dd>외향적 : 에너지가 밖으로 흐르며 사람을 만나는 것을 좋아하고 사람을 만남으로써 에너지를 얻는다.<br> 반대성향으로는 I 내향적이 있다. </dd> <dt>N</dt> <dd>직관적 : 숲을 보려는 경향이 있고 아이디어나 육감에 의존하며 주의 초점은 미래와 가능성이다. 따라서 미래지향적으로 새로운 시도를 하는 것을 좋아하며 가능성과 의미를 추구하고 변화와 다양성을 좋아한다<br> 반대성향으로는 S 감각형이 있다. 이는 나무를 보려는 경향으로 실재의 경험, 오감에 주의초점이 있어 현실 수용과 관례를 따르는 결향이 있다. </dd> <dt>F</dt> <dd>감정형 : 주관적 판단에 의존하며 주된 관심주제는 사람, 관계이다<br> 반대성향은 T 사고형이있으며 객관적 판단에 의존하고 주된 관심주제는 사실과 진실이다. </dd> <dt>J</dt> <dd>판단형 : 정리정돈과 계획성이 있다 뚜렷한 기준과 자기의사가 있으며 신속한 결론을 내리고 분명한 목적의식이 있다.<br> 반대성향으로는 P 인식형이 있고 상황에 맞추는 개방성과 목적과 방향의 변화가 상대적으로 쉽다. </dd> </dl> </dl>
글자 관련 태그
1 2 3 4 5 6 7 8
small tag : <small>Make font size smaller </small>
sup tag : <sup>supppp 윗첨자</sup>(ex)300m<sup>2</sup>의 땅이 있었으면 좋겠다
sub tag : <sub>subbbb 아래첨자</sub> (ex)내가 아는 원소기호는 H<sub>2</sub>O