goodthings4me.tistory.com
파이썬 장고를 사용해서 특정 데이터의 테이블을 만들고 데이터를 넣은 후 웹에서 간단하게 조회하는 기능을 만들면서 데이터베이스와 테이블에 접근할 수 있는 방법(장고의 파일(.py)에서 코딩으로 직접 접속)을 알게 되어 활용 후 정리함
장고(Django)에서 sqlite3에 직접 접근하는 파일 만들기
- 아래와 같이 관련 모듈을 import 하면 장고 내에서 Models 클래스로 만든 sqlite3 DB와 table을 사용할 수 있다.
- 단, 이때 사용하는 쿼리문은 장고 템플릿 문법이다.
- 모델 클래스에서 속성(컬럼) 추가 후 migrate 하고, 관련 컬럼을 update 시키려고 할 때 유용할 것으로 생각된다.(모델 클래스 속성(컬럼) 추가 후 1번 선택 후 >>> 에서 0 입력하고 업데이트 진행 시)
※ 아래 예시에서,
장고의 models.py에서 Model 클래스 이름은 Jusotb이며, 속성(table 컬럼)은 sido, sigungu, dong, bldname으로 했다.
[파이썬 소스 코드]
## 사용해야 할 모듈을 import 한다.
## 아래 4개 코드는 필수!! (*config.settings에서 config는 프로젝트 내 config 폴더)
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
import django
django.setup()
from jusodata.models import Jusotb
from django.db.models import Q
# juso_list = Jusotb.objects.filter(Q(sido = '서울특별시') & Q(dong = '성북동') & Q(bldname = '서울아파트'))
# juso_list = Jusotb.objects.filter(bldname="서울아파트")
juso_list = Jusotb.objects.all()
juso_list_cnt = juso_list.count()
print(type(juso_list), juso_list_cnt)
cnt = 10000001 # 관리번호 시작번호
idx = 1 # id count
for row in juso_list:
apt_no = 'a' + str(cnt)
Jusotb.objects.filter(id=idx).update(aptno=apt_no)
# 업데이트 쿼리문 예시) Jusotb.objects.filter(id=3072412).update(aptno='10')
# print(row.id, row.bldname, row.aptno)
cnt += 1
idx += 1
print(f'cnt:{cnt} / idx: {idx}')
# if cnt == 10001000: # 테스트로 1000개만 실행
# break
▶ 실제 코딩 중에 관리번호 필드를 추가(문자+숫자인 A10000001) 후에 생각해보니 해당 db 테이블의 컬럼에 Row를 추가할 때마다 +1 증가시켜야 하는 문제가 있었다.
def jusodata_write(request):
juso = Jusogokr.objects.last() # 맨 마지막 Row. 맨 처음은 objects.first()
print(juso.mng_no) # 관리번호 마지막 번호
manage_no = ''
if juso:
manage_no = 'a' + str(int(juso.mng_no[1:]) + 1)
# a10000001 slice 후 +1 하고 다시 문자로 결합
else:
manage_no = 'a10000001' # 처음일 경우
if request.method == 'POST':
form = JusoForm(request.POST)
if form.is_valid():
form.save()
return redirect('juso:write')
else:
form = JusoForm()
# for key in form.fields: # form.fields : 컬럼값들임
# print(key)
## 관리번호를 자동으로 +1 증가값으로 form에 전달하기
## 입력할 때 readonly 속성이라서 해당 컬험 속성값을 자동으로 할당해야함
form.fields['mng_no'].widget.attrs['value'] = manage_no
context = {
'form': form
}
return render(request, 'jusodata/jusodata_write.html', context)
'코딩 연습' 카테고리의 다른 글
파이썬 Non-UTF-8 code 에러 또는 Non-ASCII character 에러 (0) | 2022.07.09 |
---|---|
파이썬 sqlite3 db 활용 대용량 데이터 관리가 가능할까 (0) | 2022.06.24 |
짧은 주소(단축URL) 만들기 (0) | 2022.06.21 |
파이썬 장고로 주소록 만들기 [장고 기초 예제] (0) | 2022.06.17 |
웹 브라우저 새로고침(F5) 시 데이터 전송 안 되게 하는 문제 (0) | 2022.06.16 |
댓글