Django

Django와 SQLite3

UserDonghu 2023. 10. 23. 20:53

Django에서 DB(SQLite3)에 접근하는 방법은 여러가지가 있는데,

그중 하나는 https://userdonghu.tistory.com/entry/Django-%EC%8B%A4%EC%8A%B545-ORM-CRUD

 

Django ORM을 이용해서 DB CRUD 해보기

공식문서 : https://docs.djangoproject.com/en/4.2/ref/models/querysets/#django.db.models.query.QuerySet Django The web framework for perfectionists with deadlines. docs.djangoproject.com Django ORM : 우리가 만든 모델 클래스와 DB에 생성된

userdonghu.tistory.com

와 같이 ORM을 이용해서 접근하는 방법이고, 또 직접 SQL 쿼리를 실행해서 접근하는 방법도 있다.

 

django.db.connections 를 이용해서 데이터베이스 커넥션을 가져온 후, cursor() 메소드를 호출해서 SQL쿼리를 실행할 수 있다.

 

import sqlite3

conn = sqlite3.connect('ex1.db') # db파일에 연결
c = conn.cursor()

c.execute('''
CREATE TABLE books (id integer, title text, price integer) # books라는 테이블 생성
''')

c.execute('''
INSERT INTO books VALUES (1, 'python가이드', 5000) # 테이블에 데이터 삽입
''')
c.execute('''
INSERT INTO books VALUES (2, 'js가이드', 5000) # 삽입
''')

conn.commit() # 저장
conn.close() # 종료

 

db 보는법

conn = sqlite3.connect('ex1.db')
c = conn.cursor()

# 데이터 조회
for row in c.execute('SELECT * FROM books ORDER BY id'): # 아이디로 정렬
    print(row)

# 연결 종료
conn.close()

 

python manage.py shell 을 통해서 DB에 접근할수도 있다.

 

>> from django.db import connection

>> cursor = connection.cursor()

 

>> cursor.execute("SELECT * FROM blog_post")# 블로그앱의 post라는 모델 선택

>> rows = cursor.fetchall() # fetchall로 읽음

>> for row in rows:

>>     print(row)

 

>> cursor.close() # 사용 다했으면 닫기

 

Create

cursor.execute("""
    INSERT INTO blog_post 
    (title, content, head_image, file_upload, created_at, updated_at) 
    VALUES 
    ('4', '44', '', '', '2023-10-22 05:27:42.857132', '2023-10-22')
 """)

 

Read

cursor.execute("SELECT * FROM blog_post")
rows = cursor.fetchall()
for row in rows:
    print(row)

 

Update

cursor.execute("UPDATE blog_post SET title='수정된 제목 1' WHERE id=1")

 

Delete

cursor.execute("DELETE FROM blog_post WHERE id=2")

 

DB를 파일 형태로 추출 dumpdata

output.json으로 추출되어 저장됨.

python manage.py dumpdata app_name.ModelName --indent 2 > output.json # ex) blog.post
python manage.py dumpdata blog.post --indent 4 > output.json # 이렇게 하면 admin정보까지 다 뽑힘

 

외부 파일을 DB에 채우기 loaddata

python manage.py loaddata output.json