728x90

1. 상위 10개 기업 + 하위 10개 기업으로 변동됨. ->각자 5개씩 기업을 맡아서 조사하기로 함.
2. 조사 리스트.
->은행 이자율(예금 이자율)과 기업 배당수익률 비교
->기업 재무제표 크롤링해서 배당 기준일 전후에 따른 기업 영업이익 상승률 파악
->미국 기준 금리와 기업 주가 상승률 상관관계 파악

3. 시각화 tool을 tableau 사용하여 리포트 작성 (공부해야 함 ㅜㅜ 화이팅 합시당)
4. 추후 각 기업 자료 조사한 것을 모아서 산업군으로 분류할 예정.

 

 

 

 

import datetime
import pandas as pd
import pandas_datareader as web
import matplotlib.pyplot as plt

start = datetime.datetime(2020,2,28)
end = datetime.datetime(2020,4,30)

df = web.DataReader('008110.KS', 'yahoo', start,end)
df

data = pd.DataFrame(df)
data.head()

data.to_csv('/Users/youjin/Desktop/jusik_prj/stock_daedong.csv', encoding='cp949')

#  데이터 시각화

dd = pd.read_csv('stock_daedong.csv')
hh = pd.read_csv('stock_hanyang.csv')

 

 

 

 

 

 

 

 

 

'Language > python' 카테고리의 다른 글

파이썬/장고) 맥 파이썬 가상환경 띄우기.  (0) 2021.05.17
Django 모델 필드  (0) 2021.04.15
1.  (0) 2021.04.06
데이터 관리  (0) 2021.04.04
Django 테이블 만들기 - 반영 - 확인  (0) 2021.04.03
728x90

 

 

 

 

'Language > python' 카테고리의 다른 글

분석  (0) 2021.06.19
Django 모델 필드  (0) 2021.04.15
1.  (0) 2021.04.06
데이터 관리  (0) 2021.04.04
Django 테이블 만들기 - 반영 - 확인  (0) 2021.04.03
728x90

장고의 모델

장고의 모델(db)에는 다양한 필드가 존재한다

AutoField

ID(pk)로 사용 가능한 자동으로 증가하는 IntegerField다. 직접 사용할 필요는 없다. 모델의 기본키 필드는 별도로 지정하지 않으면 자동으로 추가됨.

BigAutoField

AutoField와 매우 유사한 64비트 정수다.

BigIntergerField

IntegerField와 매우 유사한 64비트 정수다. 

BinaryField

raw binary 데이터를 저장하기 위한 필드이다. 바이트 할당만을 지원한다. 이 필드는 기능이 제한적이다. Binary값에 쿼리셋을 필터링할 수 없다. ModelForm에 BinaryField를 포함시킬 수 없다.

BooleanField

논리 필드이다. true, false필드이고, 기본 폼 위젯은 CheckboxInput 이다. null 값 허용이 필요하면 NullBooleanField를 사용하자. Field.default가 정의되지 않았을 때, BooleanField의 기본 값은 None 이다. default None을 사용하고 해당 필드에 값을 넣지 않을 경우, migrate 시 에러가 발생하지 않고 실제 모델이 저장될때 DBMS에서 제약조건 에러가 난다.

CharField

작은 문자열에서 큰 사이즈의 문자열을 위한 필드이다. 많은 양의 경우 TextField를 사용한다. 기본 위젯은 TextInput이고, CharField는 필수 인수가 추가로 하나 있다.
CharField.max_length : 필드의 최대길이 (문자 수)이다. 

DateField

파이썬의 datetime.date 인스턴스에 의해 표현되는 날짜다. 

DateField.auto_now : 모델이 저장될 때 마다 매번 자동으로 필드를 현재시간이 설정한다. 항상 현재 날짜가 사용됨에 주의하자. 기본값을 재정의 할 수 없다. Model.save()가 호출 될 때 마다 작동되며 자동으로 수정된다. QuerySet.update() 같은 다른 방법으로 필드를 수정하면 해당 필드는 수정되지 않는다.

DateField.auto_now_add : 모델이 처음 생성될 때 자동으로 현재시간이 설정된다. 생성의 타임스탬프로 유용하다. 항상 현재 날짜가 사용된다. 기본값을 재정의 할 수 없다. 그러므로 객체가 생성될때 이 필드에 값을 설정하더라고 무시함. 이 필드를 수정하고 싶다면 auto_now_add=True 대신에 다음과 같이 설정한다.

쉽게말해, auto_now는 저장될때마다 매번 자동으로 필드를 현재시간으로 설정되고,
auto_now_add는 db가 처음 생성될 때 딱 한번 자동으로 현재시간이 설정된다.

 

default = today (datetime.date.today()의 값이 사용됨)
default = timezone.now (django,utils.timezone.now()의 값이 사용됨)

 

이 필드의 기본 위젯은 TextInput이다. 어드민에는 자바 스크립트 캘린더와 "Today" 숏컷을 추가한다. 추가로 invaild_date 오류 메세지 키를 포함한다.

auto_now_add, auto_now,default는 같이 쓸 수 없다. 이러한 옵션들을 섞어 쓴다면 오류가 발생한다.

필드에 auto_now 또는 auto_now_add를 True로 설정하면 editable=False와 blank=True이 설정된다.

auto_now 와 auto_now_add 옵션은 생성 또는 수정하는 순간의 기본 타임존 날짜가 항상 사용된다. 다른 것을 원한다면 auto_now_add, auto_now 대신에 default로 callable 를 사용하거나 save() 메소드를 재정의하자. 또는 DateField 대신에 DateTimeField를 사용하고 표시 시간을 datetime에서 date로의 변환등의 방법을 결정해라.

 

DateTimeField

파이썬에서 datetime.datetime 인스턴스로 표현되는 날짜와 시간이다. DateField와 동일한 추가 인수를 가지고 있다. 기본 위젯은 두개의 TextInput 이다.

 

DecimalField

고정 소수로 파이썬에서 Decimal 인스턴스로 나타낸다. 두개의 필수 인수가 존재한다. 

DecimalField.max_digits : 숫자에 허용되는 최대 자릿수다. 이 숫자는 decimal_places보다 크거나 같아야 한다.

DecimalField.decimal_places : 숫자와 함께 저장될 소수 자릿수다. 

999.22 ex ) models.DecimalField(...., 5max_digits= , decimal_places=2)

DurationField

시간주기를 위한 필드이다. 파이썬에서 timedelta로 모델링한다. PostgreSQL에서는 데이터 타입이 interval이고 오라클에서는 INTERVAL DAY(9) TO SECOND(6)이다. 다른 DBMS에서는 마이크로초의 bigint가 사용된다. DurationField의 산술 연산은 대부분의 경우에 잘 작동된다. 하지만 PostgreSQL을 제외한 모든 데이터베이스에서 DurationField의 값을 DateTimeField 산술 인스턴스에 비교하는 것은 기대한 것 처럼 동작하지 않는다.

EmailField

유효한 이메일 주소인지 체크하는 CharField이다. 입력값을 검증하는데 EmailValidator를 사용한다.

FileField

파일 업로드 필드이다. primary_key를 지원하지 않고 사용할 경우 에러가 난다.

FileField.upload_to : 이 속성은 업로드 디렉터리와 파일 이름을 설정하는 방법을 제공하고 두가지 방법을 사용 할 수 있다. 두 경우 모두 Storage.save() 메소드가 호출 된다.

문자열 값을 지정하면 strftime() 형식을 포함 할 수 있다. 주어진 디렉터리에 포맷 형식을 업로드 일시로 변경 후 파일이 업로드 된다.

class MyModel (models.Model): upload = models.FileField(upload_to='uploads/') uoload = models.FileField(upload_to='uploads/%Y/%m/%d/')

기본 FileSystemStorage를 사용하면, 업로드된 파일이 저장될 로컬 파일 시스템에 위치가 MEDIA_ROOT 경로에 추가된다.

또한 upload_to 는 함수 같은 callable일 수 있다. 파일 이름을 포함하여 업로드 경로를 얻기 위해 불려진다. callable은 두 인수를 수용하고 스토리지 시스템으로 전달되는 Unix 스타일 경로 (슬래쉬를 포함)를 리턴해야 한다. 두 인수는 다음과 같다.

instance : FileField가 정의된 모델의 인스턴스, 현재 파일이 첨부되는 특별한 인스턴스다.
filename : 원본 파일에 주어진 이름. 최종 목적 경로를 결정할때 사용될 수 있고 아닐수도 있다.

파일과 관련된 필드는 여러 종류가 있다. 잘 정리된 블로그를 참고하자.
https://brunch.co.kr/@ddangdol/4

FloatField

파이썬에서 float 인스턴스로 표현된 부동 소숫점 숫자이다. 이 필드의 기본 폼 위젯은 localize가 False일때 NumberInput이고 그 외는 TextInput이다. 

  • FloatField vs DecimalField
    FloatField 클래스는 때로는 DecimalField 클래스와 섞여 쓰인다. 비록 둘 모두 실수를 뜻하지만 다르게 숫자를 표현한다. FloatField는 내부적으로 파이썬의 float 타입을 사용하지만 DecimalField는 파이썬의 Decimal 타입을 사용한다. 두 필드의 비교에 대한 추가 정보는 파이썬의 decimal 모듈 문서를 참고하자.

ImageField

FileField로 모든 속성과 메소드를 상속받지만, 업로드된 객체가 유효한 이미지인지 검증한다. ImageField는 FileField에 사용 가능한 특별한 속성들 외 추가적으로 height와 width 속성이 있다. ImageField는 이러한 속성의 쿼리를 유용하게 하기 위해 두가지 선택적인 추가 인수를 가지고 있다. 

ImageField.height_field : 모델 인스턴스가 저장될 때 이미지의 높이가 자동으로 채워지는 모델 필드의 이름이다.

ImageField.width_field : 모델 인스턴스가 저장될 때 이미지의 너비가 자동으로 채워지는 모델 필드의 이름이다.

Pillow 라이브러리를 요구한다. ImageField 인스턴스는 데이터베이스에 기본 최대길이가 100자인 varchar 칼럼으로 생성된다. 다른 필드와 마찬가지로 최대 길이를 max_length 인수를 사용하여 변경할 수 있다.

IntegerField

정수다. 이 필드의 기본 폼 위젯은 localize가 False일 때 NumberInput이고 그 외에는 TextInput이다.

GenericlPAddressField

문자열 형식에 IPv4 나 IPv6 주소이다. 이 필드의 기본 폼 위젯은 TextInput 이다. 모든 문자는 소문자로 변환된다. 

GenericIPAddressField.protocol : 지정된 프로토콜을 위해 입력을 검증하여 제한한다. 허용되는 값은 'both'(기본 값), 'IPv4', 'IPv6'이다. 대소문자를 구분하지 않는다.

GenericIPAddressField.unpack_ipv4 : ::ffff:192.0.2.1과 같이 IPv4 매핑된 주소의 압축을 푼다. 이 옵션이 허용되면 앞 주소가 압축해제되어 192.0.2.1이 된다. 기본값은 사용 불가하다. 오직 protocol이 'both'로 사용 될 때만 사용 가능하다. 빈 값을 허용한다면 빈 값이 null로 저장되므로 null을 허용해야 한다.

NullBooleanField

BooleanField와 유사하지만, 옵션 중 하나로 NULL을 허용한다. BooleanField에 null=True 대신에 사용한다. 이필드의 기본 폼 위젯은 NullBooleanSelect다.

PositiveIntegerField

IntegerField와 비슷하지만 0 또는 양수이어야 한다. 

PositiveSmallIntegerField

PositiveIntegerField와 유사하지만, 오직 특정지점 이하만을 허용한다. 

SlugField

Slug는 신문에서 사용되는 용어이다. 슬러그는 오직 문자, 숫자, 밑줄, 하이픈만을 포함하는 짧은 레이블이다. 일반적으로 URL에 사용된다.

CharField와 마찬가지로, max_length를 지정할 수 있다. max_length가 지정되지 않으면 장고는 기본값으로 50자를 사용한다. 암묵적으로 Field.db_index 를 True로 설정한다. 다른 값들로 SlugField를 자동으로 미리 채우는 것이 유용하다. prepopulated_field를 사용하여 관리자에서 자동으로 이 작업을 할 수 있다.

SlugField.allow_unicode : 값이 True 라면, 필드는 ASCII 문자 외에 Unicode 문자를 허용한다. 기본값은 False 이다.

SmallIntegerField

IntegerField와 유사하지만, 오직 특정 지점 이하만을 허용한다.

TextField

큰 텍스트 필드이다. 이 필드의 기본 폼 위젯은 Textarea 이다. max_length 속성이 지정되면, 자동으로 생성된 폼 필드의 Textarea 위젯에서 반영된다. 하지만 모델이나 데이터베이스 레벨에서 강제 적용되지는 않다. 저런 경우는 CharField를 사용하자.

TimeField

파이썬에서 datetime.time 인스턴스로 나타내는 시간이다. DateField와 동일한 자동 채우기 옵션을 허용한다. 이 필드의 기본 폼 위젯은 TextInput이다. 

URLField

URL을 위한 CharField이다. 이 필드의 기본 폼 위젯은 TextInput 이다. 모든 CharField의 서브클래스와 마찬가지로, URLField는 선택적 인수인 max_length 를 가지고 있다. max_length를 지정하지 않는다면, 기본 값인 200자가 사용된다.

UUIDField

universally unique identifiers를 저장하기 위한 필드다. 파이썬에서는 UUID 클래스를 사용한다. PostgreSQL을 사용하면 uuid 데이터 타입으로 저장되고 이외에는 char(32)로 저장된다.

출처 : https://brunch.co.kr/@ddangdol/4

'Language > python' 카테고리의 다른 글

분석  (0) 2021.06.19
파이썬/장고) 맥 파이썬 가상환경 띄우기.  (0) 2021.05.17
1.  (0) 2021.04.06
데이터 관리  (0) 2021.04.04
Django 테이블 만들기 - 반영 - 확인  (0) 2021.04.03
728x90

장고는 admin 관리자 페이지, 관리할 수있는 DB까지 같이 만들어줌. 

 

 

폴더에 가상환경 생성 후 활성화 해주고,

장고 설치. 그리고 장고 어드민 스타트프로젝트 이름website.

cd website,

애플리케이션 생성. python manage.py startapp 이름(blog)

 

 

1. 어플리케이션 등록

장고에게 이런 앱 있다고 말해ㅇ줘야 함

앱 디렉 말고 프로젝트 디렉에 가서

 

settings.py 밑 쪽에 있는 Installed app~ 에

이 class 추가해주기.

 

.(접근자) 사용해 넣어주기 (맨 마지막은 클래스 이름! 알지?)

 

109번 라인 타임존도 Asia/Seoul 로 바꿔주기!!

 

 

2. 장고에게 접근하는 방법 알려주기.

브라우저에서 인터넷에 쳤을 때 접근할 수 있는 방법 알려주기. 프로젝트 폴터에 있는 urls.py 가서,

url 필요한 모듈 import. 

 

7번째 줄 마지막 static 소문자!

 

만약 기본주소 (http://localhost:9000/) 로 들어오면 , 

10번째 줄: path가 아무것도 없는 기본 주소로 들어오기 때문에 url 블로그로 넘겨줘라. 그럼, 주소가

http://localhost:9000/blog 로 바뀜. 

then, 9번째 줄 에 있는 블로그 앱으로 경로 지정. -> 설정한 블로그 앱에 따라 처리가 될 것임.

 

12 : 정적파일 (자바스크립트나,CSS,이미지 파일) 을 처리할 수 있도록 설정.

(blog에 url.py 만들고 9번째 줄 파일 설정해주기! 여기서 처리한 페이지 규칙에 따라 홈페이지 바뀔 것임.)

 

3. DB 생성

데이터 베이스 만들 때는 먼저 데이터베이스 모델 구조에 변화가 있는지 체크. 

python manage.py makemigration 

                              migrate

 

 

OK 뜨면 그 후 , 장고 개발 서버 실행 가능! 

(debug = True.)

 

저 주소로 따라가보면 에러가 뜸. 왜냐? blog폴더의 urls 파일의 urlpatterns 에 우리가 아무것도 설정이 안되어있기 때문이다. 

index.html 로 사용자 화면에 보여준다! (9) - 일단 빈 값 .

 

html 페이지 작성. blog에 템플릿이라는 폴더 만들어주고, index.html 페이지 만들어주기

doc + 탭 치면 나옴. title, body 부분 작성해주기.

 

<script> alert 쓰면 알림 뜬다. 보통 스크립트 파일은 따로 저장함. 그래서 폴더 따로 만들어주고, js 파일 만들어주기.

 

 

만든 후에 설정 가서 경로 잡아줘야 함!

 

* static 파일을 참조해 올 경로 설정

각 앱별로 static파일을 정의해놓았을 경우, STATICFILES_DIR 대신

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

를 설정하고,

python manage.py collectstatic 명령어를 주어 /static/폴더내로 복사해주면 적용됨.

 

 

 

 

 

 

colorlib.com/wp/bootstrap-search-bar/.  디자인은 여기서 받아옴!

 

 

 

다운받은 폴더는 이렇게 추가해주기. 

애플리케이션 폴더 안에 넣어줘야 한다. 

 

 

 

 

3번째 줄 처럼 경로 잡아주고,

12,13 번째 href = 뒤로 "{% ~ 넣어주면 완성 !

 

{% static ~ : 장고의 명령어. load static 먼저 선언한 후에 12,13줄 처럼 url 앞 {% 잡아줘야 함.

 

728x90

장고 shell 모드 실행

 

파이썬 쉘과 똑같음.

 

 

데이터 넣어주기.

중간은 오타,, ㅎ

다 쓰고 qs.save()

누르면 상세정보 확인 가능.

 

 

 

 

레코드 읽기

 

두개 이상의 데이터 가져올 때는 QuerySet. 하나의 데이터 타입만 가져올 때는 get 함수 이용. 조건 달아서

여기서 반환된 값이

바로 코드에서 모델에 데이터 입력 할 때 밑에 str 메소드 명시해줘야 한다고 했는데 여기서 name 반환된 것임.

 

 

 

 

 

레코드 업데이트 시 그냥

qs=Students.objects.get(s_name='parkjun')

qs.s_age=20

 해 주면 됨! (update)

 

삭제. qs지정해주고, qs.delete()

728x90

model 클래스 코딩

 

클래스를 만듬으로써 데이터베이스에 테이블을 만들어 놓은것임. 

이 클래스는 모델즈 클래스 상속받고,

필드이름 정의. 속성 ㄷ=정할 때는 데이터 타입 명시해주고, 길이까지 명시

클래스 만든 다음에

str 메소드 넣어줘야 외부에서 접근 시 테이블 이름 반환 해줘서 어떤 테이블인지 쉽게 알 수 있다.

 

 

 

 

admin 파일 열어서  클래스 등록하는 과정 거치기.

 

 

 

잘 적용됐나 확인 위해 

변경사항 있는지 검색

 

반영해주기!

 

 

 

students 생성 확인 가능.

 

 

728x90

나도코딩님의 수업을 듣고 따로 정리한 것입니다. 

 

 

 

시가총액 200위를 네이버에서 검색 후 csv 파일에 넣고 저장하는 작업입니다. 

 

먼저 코드!

import csv
import requests
from bs4 import BeautifulSoup


url = "https://finance.naver.com/sise/sise_market_sum.nhn?&page=1"

filename = "시가총액1-200.csv"
f = open(filename, "w", encoding="utf-8-sig", newline="")  # newline : 공백으로 하면 자동 줄바꿈됨.
writer = csv.writer(f)


title = "N	종목명	현재가	전일비	등락률	액면가	시가총액	상장주식수	외국인비율	거래량	PER	ROE".split("\t")
# ["N", "종목명", "현재가"]

print(type(title))
writer.writerow(title)

for page in range(1,5):
    res = requests.get(url + str(page))  #url 정보, 페이지 숫자 넣어주기
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "lxml")

    data_rows=soup.find("table", attrs={"class":"type_2"}).find("tbody").find_all("tr")
    for row in data_rows:
        colums = row.find_all("td")
        if len(colums) <= 1:   # 의미없는 데이터는 skip
            continue
        data = [column.get_text() for column in colums]
        # print(data)
        writer.writerow(data)

 

 

만약 open 줄에서 encoding 을 ="utf8" 로 했다면 엑셀로 csv 파일을 보았을 때 한글이 깨져서 나온다. 

이것의 해결방법은 utf-8-sig 을 넣어주는 것.

 

 

저장 후 실행을 누르면 vscode 옆 파일 칸에 내가 설정한 이름 (filename) 으로 생성된 것을 확인할 수 있다. 

 

직접 폴더로 들어가서 엑셀 파일로 실행해보면 

 

 

 

 

확인 가능 !!

728x90

(나도코닝님의 강의를 듣고 따로 실습 해본 것 입니다.)

웹툰은 네이버 웹툰 중에서 내가 좋아하는 '아홉수 우리들 ' 선택!

 

 

웹툰 페이지에 가서 관리자 모드 전환 뒤 elements 들을 복사해왔다.

 

 

requests : 웹에서 원하는 정보를 추출할 때 웹페이지의 문서정보 (웹페이지의 정보)를 가져올 수 있게 하는 라이브러리

lxml : 구문 분석하는 파서.

 

9번째 줄) soup 문법으로 모든 문서를 가 가져오고, 'td' 로 시작하는 것 중에 class 가 title 인 것을 변수에 넣었음.

 

 

 

 

여러 줄 출력 결과

 

속성은 대괄호!

 

 

 

결과

가장 최신 화부터 1페이지에 있는 회차 정보, 회차 제목을 모두 크롤링 해왔다. 

 

 

 

 

 

2. 평점 구하기

 

 

보기 좋게 전체와 평균까지 넣어주고

 

 

728x90

먼저, 데이터베이스의 연결 정보를 저장할 파일을 만들어야 한다. 그리고 다음처럼 데이터베이스 연결 정보를 저장한다.

(config.py)

db = {
    "user": "root",
    "password": "1234",
    "host": "localhost",    #1
    "port": 3306,           #2
    "database": "minister"  #3
}
DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@
{db['host']}:{db['port']}/{db['database']}?charset=utf8"

 

1. 접속할 db의 주소다. 만일 외부 서버에 설치되어있는 데이터베이스에 접속한다면 해당 서버의 주소를 지정해 주어야 한다.

2. 접속한 db의 포트 넘버다. 관계형 데이터베이스는 주로 3306 포트를 통해 연결된다. api나 사이트와 마찬가지로 데이터베이스도 네트워크를 통해 연결되는 시스템이므로 당연히 포트 정보가 필요하다.

 

3. 실제 사용할 db 이름. 이전에 minister란 db 이름으로 테이블을 생성했다. 테이블 만드는 법을 모른다면 내 블로그 카테고리 mysql에 있는 내용을 참고!

 

( 이렇게 설정 파일을 따로 만드는 이유는 두가지 인데, 1. 설정 정보를 따로 관리함으로써 민감한 개인 접속 정보를 노출하지 않아도 된다. 2. 각 환경과 설정에 맞는 설정 파일을 적용할 수 있게 된다.

 

 

 

 

 

 

 

 

 

 

app.py을 수정해 config.py 파일에서 데이터베이스 설정 정보를 읽어들여 데이터베이스와 연결하도록 한다. 

sqlalchemy 를 사용해 mysql 데이터베이스에 연결해 데이터를 저장 및 읽어들이도록 한다.

from flask import Flask , jsonify, request
from sqlalchemy import create_engine, text


# config 파일에서 데이터베이스 설정 정보 읽어들여 db와 연결
def create_app(test_config = None):   #1
    app = Flask(__name__)

    if test_config is None:                   #2
        app.config.from_pyfile("config.py")
    else:
        app.config.update(test_config)

	#3
    database = create_engine(app.config["DB_URL"], encoding="utf-8", max_overflow=0)
    app.database = database   #4
    return app  

 

1. 함수 정의. create_app 함수가 test_config 인자를 받는다. 단위 테스트를 실행시킬 때 테스트용 데이터베이스 등의 테스트 설정 정보를 적용하기 위함이다. 

 

2. 만일 인자가 none 이면 config 파일에서 설정을 읽어들인다. 아니라면, test_config 값이 설정되어 들어왔다면 test_config 의 설정을 적용시킨다.

 

3. 위에서 생성한 Engine 객체를 flask 객체에 저장함으로써 create_app 함수 외부에서도 데이터베이스를 쓸 수 있게 한다.

 

 

 

 

 

 

 

회원가입 엔드포인트

    
    
    
    @app.route("/sign-up", methods=["POST"])  
    def sign_up():
        new_user = request.json
        new_user_id = app.database.execute(text("""   #1
        INSERT INTO users(
            name,
            email,
            profile,
            hashed_password
        ) VALUES (
            :name,
            :email,
            :profile,
            :password
        )
        """), new_user). lastrowid        #2

row = current_app.database.execute(text("""
    SELECT
        id,
        name,
        email,
        profile
    FROM users
    WHERE id = :user_id
    """), {
        'user_id' = :new_user_id
    }).fetchone()

    created_user = {
        'id'     :row['id'],
        'name'   :row['name']
        'email'  :row['row']
        'profile':row['profile']
    } if row else None

    return jsonify(created_user)

http 요청을 통해 전달받은 정볼르 db에 저장한다. 

app.database는 SQLAlchemy 는 mysql 에 연결된 Engine 객체다. 

app.database 를 통해 원하는 구문을 해당 데이터베이스에 실행하게 된다. 

 

, newuser). lastrowid ==> sql 구문에 사용될 실제 데이터들은 http 요청에서 읽어들인 데이터를 그대로 사용한다. http  요청을 통해 전송된 JSON데이터의 구조가 SQL에서 필요한 필드를 모두 포함하고 있기 때문이다. 

만일 필드 이름이 틀리거나 필드가 부재인 경우 오류가 나게 된다. 새로 사용자가 생성되면, 새로 생성된 사용자의 id 를 lastrowid 를 통해 읽어 들인다.

 

 

 

 

 

 

FLASK 환경을 실행 시키고

 

 

 

코딩한 내용대로 http 요청을 보내면 위와 같이 데이터가 전송된 것을 확인할 수 있다.

 

 

같은 방법으로 나머지 엔드포인트들도 구성하면 끝 !

728x90

SQLAlchemy : 파이썬 코드에서 DB 와 연결하기 위해 사용하는 라이브러리 중 하나.

ORM (관계형 DB 테이블들을 프로그래밍 언어의 클래스로 표현할 수 있게 해주는 것.

           즉, 클래스를 사용해 테이블을 ㅠㅛ현하고 데이터를 저장,읽기,업데이트 등을 할 수 있게 해준다.)

 

파이썬 가상환경을 활성화한 후 pip 명령어를 이용해 설치해준다.

 

Mysql용 DBAPI 사용하기 위해 공식 파이썬 DBAPI 인 mysql-connector 를 사용한다.

 

 

 

'Language > python' 카테고리의 다른 글

웹 스크래핑 기초 ) 웹툰  (0) 2021.03.24
SQLAlchemy 를 사용하여 api와 database 연결하기  (0) 2021.02.27
Strip(), sep(),zip()  (0) 2021.02.21
주피터로 flask - BeautifulSoup()  (0) 2021.02.17
여러가지 표기법  (0) 2021.02.09

+ Recent posts