[flask] sqlalchemy로 디비 입력시 None 에러

Computer 관심/Flask|2022. 6. 28. 23:16
반응형

sqlalchemy로 디비에 정보가 none이 들어가게 되면 에러가 발생하게 된다. 

그래서 디비에 들어가는 orm을 만들기 전에 아래처럼 체크를 하여 none이 있으면 다른 값으로 바꾸어서 넣어준다.

그 전에 pandas를 사용할 때는 none을 다른 값으로 바꾸어주는 함수를 사용했는데 

아래의 방법이 더 나은것 같다. 

 

if inflow_product['customFields']['custom8'] == "part" or inflow_product['customFields']['custom8'] == "Part" :
                inflow_product['customFields']['custom8'] = True
            else:
                inflow_product['customFields']['custom8'] = False
            
            # checking none
            name = inflow_product['name']
            description = inflow_product['description'] or 'NO INFO'
            size = inflow_product['customFields']['custom3'] or 'NO INFO'
            if inflow_product['defaultPrice'] is None:
                price = 0
            else:
                price = inflow_product['defaultPrice']['unitPrice'] or 0
            
            if inflow_product['defaultImage'] is None:
                img_url = '/favicon.png'
            else:
                img_url = inflow_product['defaultImage']['originalUrl'] or '/favicon.png'
                
            material=inflow_product['customFields']['custom4'] or 'no info'
            is_part = inflow_product['customFields']['custom8'] or False
            discount_rate = inflow_product['customFields']['custom2'] or 0

            if not product_info:
                print('new product')
                counts['insert'] = counts['insert'] + 1 
                s1 = ProductInfo(article=name.strip(), description=description,size=size,\
                        price=price, img_url=img_url, material =material, is_part=is_part)
                try:
                    s1.online_shop = False
                    s1.discount_rate = discount_rate
                except Exception as e:
                    return(e)
                db.session.add(s1)      
            else:
                print('existing product')
                counts['update'] = counts['update'] + 1
                data_to_update = dict(article = name.strip(), description = description, size=size,\
                        price = price, img_url=img_url, material=material, is_part=is_part)  
                try:
                    data_to_update['discount_rate'] = discount_rate  
                    data_to_update['online_shop'] = product_info.online_shop or False
                    
                except Exception as e:    
                    return(e)
                db.session.query(ProductInfo).filter_by(article=name).update(data_to_update)
            db.session.commit()

댓글()

플라스크 팩토리 패턴으로 바꾸기

Computer 관심/Flask|2022. 1. 13. 00:12
반응형

플라스크는 하나에 파이썬 파일에 서버를 쉽게 만들 수 있다. 

엄청 간단한 기능을 만들거나 테스트앱을 만들때 간단히 하나의 파일로 만들면 빠르게 개발 할 수 있다. 

하지만 조금만 앱의 크기가 커지면 하나의 파일로 코드를 작성하는게 불편해 지는 때가 온다.

 

팩토리 패턴을 사용하여 파일을 나눌 수 있다.

 

일단 참고한 사이트는 아래의 사이트이다. 사이트에 어떻게 나누어야 하는지 아주 자세하게 잘 나와있다. 

https://wikidocs.net/81044

 

2-01 플라스크 기초 다지기

현재 파이보 프로젝트는 `projects/myproject` 디렉터리 아래에 pybo.py 파일만 생성한 상태다. 그런데 이보다 규모를 갖춘 플라스크 프로젝트를 만들고자 한 ...

wikidocs.net

 

간략하게 설명한다면

1. 파이썬 메인 파일을 __init__.py로 바꾸어 폴더 통체로 모듈화를 한다

2. views 폴더를 만들어서 url을 적고

3. models.py를 만들어서 모델을 넣는다. 

 

이걸 하는 동안 작은 문제가 발생했는데 다음과 같다.

시작과 함게 디비를 만드는 db.create_all()이 에러를 발생했고 

 

 

__init__.py파일 안에 아래와 같이 코드를 만들었더니 디비가 생성되지 않는 에러가 나타났다. 그런데 

def create_app():


    with app.app_context():
            db.create_all()
            
    from .views import main_views
    app.register_blueprint(main_views.bp)
    return app

 

아래 처럼

with app.app_context():

      db.create_all()

을 맨 마지막에 적으니 작동이 된다. 

 

def create_app():
	
    
    from .views import main_views
    app.register_blueprint(main_views.bp)
    
    with app.app_context():
    	db.create_all()  
    return app

 

 

코드 나눈건 아래 같은 방식으로 나누었다.

 

__init__.py

from flask import Flask
from flask_cors import CORS
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

# *** 중요 (팩토리 패턴세팅) ***
db = SQLAlchemy()
migrate = Migrate()

# ***** 팩토리 패턴에서 자동으로 실행되는 create_app() 함수 
def create_app():
    app = Flask(__name__)
    CORS(app)

    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///inventory.db" # sqllite
    # app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://로컬유저네임:로컬비번@localhost/default'
    # app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://닉네임:비밀번호@파이썬애니웨어닉네임.mysql.pythonanywhere-services.com/디비네임$default'
    app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {'pool_recycle': 280}
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

    UPLOAD_FOLDER = './downloads'
    
    # *** 중요 (팩토리 패턴세팅) ***
    app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
    db.init_app(app)
    migrate.init_app(app, db)

    from .views import main_views
    app.register_blueprint(main_views.bp)
	
    with app.app_context():
        db.create_all()

    
    return app

 

 

views.py

# *** 중요 (팩토리 패턴세팅): Blueprint 임포트하기 ***
from flask import Blueprint
from flask import request
import pandas as pd
from myapp import db
from myapp.models import ProductInfo, Quots, SalesDetail, StockLevel, Sales, Purchase, Bom, QuotsDetail, PurchaseDetail
import json
from werkzeug.utils import secure_filename
from flask import make_response

# *** 중요 (팩토리 패턴세팅): url 경로 / 기준으로 엔드포인트 만듬 ***
bp = Blueprint('main', __name__, url_prefix='/')

@bp.route("/add_product_info", methods=['GET', 'POST'])
def add_product_info():
    if request.method == 'POST':
        objects = []
     	...
        return '0'
    else:
        return '0'


@bp.route("/csv_upload", methods=['POST'])
def csv_upload():
    if request.method == 'POST':
        counts = {'total':0, 'insert': 0, 'update':0}
        if 'file' not in request.files:
            print('No file part')
            
        file = request.files['file']
        if file.filename == '':
            print('No selected file')

        if file and allowed_file(file.filename):
        ...
        
    print('success')        
    return {'stauts':'success', 'counts':counts}


@bp.route("/product_edit", methods=['POST'])
def product_edit():
    if request.method == 'POST':
        row = json.loads(request.data)['data']
         ...
        db.session.commit()
    return {'res':0}

 

 

models.py

# *** 중요 (팩토리 패턴세팅)__init__에 만든 db 가져오기 ***
from myapp import db
import datetime

class ProductInfo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    article = db.Column(db.String(32), unique=True, nullable=False)
    ...
    #server deafult는 string
    online_shop = db.Column(db.Boolean, nullable=False, server_default='0', default=0)
    stocks = db.relationship("StockLevel")

    def as_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}


class Sales(db.Model):
    __tablename__ = 'sales'
    id = db.Column(db.Integer, primary_key=True)
    ...
    status = db.Column(db.String(16))
    children = db.relationship("SalesDetail")

 

> set FLASK_ENV=development
> flask run

 

댓글()

pythonanywhere에서 DB 마이그레이션(migration) 하기

Computer 관심/Flask|2021. 10. 9. 23:34
반응형

https://flask-migrate.readthedocs.io/

 

 

로컬 마이그레이션 

set FLASK_APP=main.py

 

1. 마이그레이션 폴더를 추가함

flask db init

2.  마이그레이션 파일 생성

(생성된 파일을 잘 봐야 한다고 함. 왜냐면 테이블 이름이나 칼럼 이름을 바꿀경우 수동으로 수정 필요)

$ flask db migrate -m "Initial migration."

3. 마이그레이션 적용

$ flask db upgrade

 

깃 커밋

1. 깃 커밋 후 푸쉬

 

파이썬 애니웨어에 적용

1. 파이썬 애니웨어에서 git pull (이를통해 적용을 시킬 파일까지 불러 올 수 있다.)

2. 파이선 애니웨어에서도 마이그레이션 적용

$ flask db upgrade

로컬에서 db를 수정한뒤 flask db upgrade명령어를 적어서 pythonanywhere에 적용한 모습

※ 호스팅한 서버의 마이그레이션 파일과 개발서버의 마이그레이션 파일이 같으면 문제가 날 가능성이 적을 겉이다.

 

 

이렇게 마이그레이션이 작동이 안되는 경우 해결법 

해결법 1. 마이그레이션 관련 파일 삭제 후 초기화

 

로컬

1. 다운그레이드로 디비를 되돌림

 

2. migration 폴더를 삭제 +  alembic_version 테이블을 제거

3. 마이그레이션 폴더를 추가함

flask db init

4.  마이그레이션 파일 생성

(생성된 파일을 잘 봐야 한다고 함. 왜냐면 테이블 이름이나 칼럼 이름을 바꿀경우 수동으로 수정 필요)

$ flask db migrate -m "Initial migration."

5. 마이그레이션 적용

$ flask db upgrade

 

6. git push

 

적용서버

1. alembic_version테이블 제거

2. 깃 풀로 새로 만들어진 마이그레이션 파일을 다시 받아옴

3. 마이그레이션 파일 적용

export FLASK_APP=main.py

 

$ flask db upgrade

 

 

 

해결법 2.

서버와 같게 만들어줌 - python anywhere에서 bash가 아닌 mysql을 클릭

 

1. alembic_version을 업그레이드 이전 버전으로 맞춤. 

 

2. 만약 alembic_version테이블 자체가 없으면 sql 쿼리를 통해 테이블 생성을 함

 

 

-- 테이블 만들기

CREATE TABLE alembic_version (
    version_num varchar(32) NOT NULL PRIMARY KEY
);

 

-- 테이블에 데이타 변경하기

UPDATE alembic_version SET version_num = '52220a6a6d76' WHERE version_num = 'c2d3b91fd96e';

 

-- 마이그레이션에 엉뚱한 쿼리가 있으면 변경해 줌

 

$ flask db upgrade

 

 

해결법 3. 마이그레이션을 안쓰는법

sql문을 써서 직접 실제 서버의 테이블을 업데이트를 한뒤 ( ALTER TABLE 아래 링크는 sql로 수정하는 법)

https://stackoverflow.com/questions/92082/add-a-column-with-a-default-value-to-an-existing-table-in-sql-server

※ 유용한 쿼리 show tables;, describe <table name>;

 

그냥 git으로 파일을 push 한뒤 sql로 테이블 구조를 바꾸고 alembic_version 테이블에 값을 로컬에 있는 것과 똑같이 만들어줌

 

 

UPDATE alembic_version SET version_num = '52220a6a6d76' WHERE version_num = 'c2d3b91fd96e';

 

 

 

- nullable= false 인 필드를 추가 시켜야 하는 경우

https://medium.com/the-andela-way/alembic-how-to-add-a-non-nullable-field-to-a-populated-table-998554003134

 

Alembic: How to Add a Non-Nullable Field to a Populated Table

It is quite easy to add a non-nullable field to an empty table. Any migration tool, including Alembic, can automatically generate a…

medium.com

간단하게 말하자면 이건 자동이 아니다. ㅠㅠ 직접 마이그레이션 파일을 수정하는 것이다.

nullable = false로 바로 했을 경우 기존에 있던 row들에 값이 없기 때문에 

먼저 nullable = true로 만들어준 뒤 기존 필드에 값을 넣고 그걸 nullable =false로 바꾸어주는 방법이다.

 

 

-nullable = false면서 unique면...

nullable을 true로 바꾸고 기존에 값에 unique한 값 (row의 index나 uid) 을 넣어준 뒤

nullable을 false로 바꾸면 될 것이다. 

 

 

-메이저 체인지는 인식하는데(삭제, 생성) 값의 크기가 변경됬을때 작동 안하면

 

compare_type = True 추가해줘야함 (어디에 추가하는지 중요) 링크 참조

https://stackoverflow.com/questions/58532518/why-flask-migrations-does-not-detect-a-fields-length-change

 

 

- 만약 개발서버에서는 sqlite를 쓰고 실서버를 mysql을 쓰는 경우 엄청 고생하게 됨.

 

 

 

 

 

댓글()

sqlalchemy 사용시 db object를 jason으로 바꾸는 방법

Computer 관심/Flask|2021. 9. 24. 21:31
반응형

디비에서 얻어온 객체는 딕셔너리 형태로 바꿔줘야 한다. 

여러가지 방법을 시도했는데 가장 쉬운 방법은 아래와 같다.

 

 

플러터에서 객체를 json을 바꾸는 방법과 비슷하다.

디비모델에 as_dict함수를 추가한다.

class User(db.Model):
   def as_dict(self):
       return {c.name: getattr(self, c.name) for c in self.__table__.columns}

그리고 바꾸려는 객체.as_dict()를 하면 response를 할 수 있다.

 

이 방법을 안쓰면 하나하나 {'name':instant.value}와 같은 방식으로 딕셔너리를 만들어서 전달해야한다.

댓글()

2) 플라스크 api pythonanywhere MYSQL DB와 연결하기

Computer 관심/Flask|2021. 9. 23. 15:16
반응형

이전글에서 말했듯 그냥 SQLite 를 디비서버 대신 사용하려 했었다.

sqlite 파일이 파일루트에 생성된 것도 볼 수 있었는데

문제는 쓰기에서 파일의 변형으로 보아서인지 쓰기 동안 읽기도 불가능 한줄알았다.

(알고 보니 그게 문제는 아니였다.)

 

 

MYSQL DB로 옮겨보려고 한다.

 

 

* sqlite에서 mysql로 옮기면서 디비를 만들때 디비설정에서 여러에러 발생한다.

1) sqlite에서 string에 size를 정해줄 필요가 없었는데 mysql에서는 정해 줘야한다.

2) default에 false 대신 0를 넣어줌

3) server_default에서는 스트링만 받는다. 

4) 데이터 입력시 엑셀에 빈칸은 nan으로 되어 pandas

(nan can not be used with MySQL 에러가 발생)

5. foreign key 참조 값은 string인데 그거를 받는 필드값을 int로 설정한경우 (sqlite에서는 됬었다...)

 

등, MySQL을 설치하기 귀찮다고 로컬에서 안깔고 하니 더 고생이다.

 

이렇게 에러가 발생해서 클라이언트와 연결이 안되면 cors 에러를 보내기 때문에 엉뚱한데서 에러를 찾으려다 시간을 보낼 수가 있다.

 

 

 

일단 파이썬애니웨어에서 MySQL 디비를 만든다.

 

비밀번호를 잊어버리지 않으려고 엄청 쉽게 만들었더니 아래와 같이 나온다.

 

 

아래의 화면은 생성된 디비의 정보이다.

start a console on 저 링크를 클릭하면 콘솔로 들어가져서 여러가지 쿼리를 입력 할 수 있다.

 

 

 

SQL디비로 연결하는 기존의 코드는 이와 같다.

app = Flask(__name__)
CORS(app)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///inventory.db"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

bash 화면에서 pymysql을 설치하고 

pip install pymysql

import를 할 필요는 없다.

 

이러한 형식을 바꾸어줄것이다.

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/db_name'
# flask sqlalchemy를 쓸 경우 추가. https://www.pythonanywhere.com/forums/topic/11116/
# 안쓰니 서버가 멈쳐버림
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {'pool_recycle' : 280}

 

 

이런식으로 들어가게 될 것이다. 

 

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://seansoft:bbc123456@seansoft.mysql.pythonanywhere-services.com/seansoft$default'

 

깃이나 파일을 직접 올린뒤 WEB 메뉴에서 리로드를 한다.

 

bash console에 들어가 show tables를 치니 테이블들이 생성됨을 볼 수 있다.

 

row가 잘 생성됬는지 보기 위해선 

select count(*) from 테이블이름

 

 

자료 

플라스크 sqlalchemy 연결

https://stackoverflow.com/questions/27766794/switching-from-sqlite-to-mysql-with-flask-sqlalchemy

 

 

댓글()

1) 플라스크 api 서버 pythonanywhere에 배포

Computer 관심/Flask|2021. 9. 20. 22:05
반응형

그냥 과정을 나열하면 복잡하다고 느낄 수 있기 때문에

4개의 섹션으로 나누었다. 

1. 파일준비

2. 파이썬애니웨어에 파일설치

3. 파이썬애니웨어에 앱생성

4. 세팅(앱과 파일연결)

 

자신의 컴퓨터에서 해야할 부분

1. 파일준비

1) requirements.txt생성

2) 커밋한뒤 깃허브에 푸쉬하기

 

섹션 1 파일준비 끝

 

파이썬애니웨어에서 해야할 부분

2. 파일설치

1) 콘솔에 들어가 가상환경설치 (가상환경의 이름을 myvenv로 만듬)

mkvirtualenv myvenv --python=/usr/bin/python3.8

 

2) 깃에서 클론하기 

git clone https://github.com/깃이름/프로젝트이름.git

깃허브의 아이디와 비밀번호를 입력하라고 하는데 비밀번호 대신에 엑세스토큰을 붙여 넣는다.

 

3) 가상환경으로 들어가기

workon myvenv

 

파이썬 애니웨어 FILE 메뉴에 가보면 아래처럼 폴더와 파일들이 설치된 걸 볼 수 있다.

 .virtualenvs/

프로젝트명/

 

4) 패키지 설치하기 (프로젝트로 들어가 requirements.txt를 설치)

cd 프로젝트명

pip  install -r requirements.txt

 

섹션 2 파일 설치 끝

 

 

3. 앱 생성하기

이제 이렇게 설치한 파이썬파일과 연결할 앱을 만들어 주어야 한다.

1) 웹앱 만들기

웹앱이 없다고 하는데 하나 만들어줌

2) 프레임워크 선택

프래임워크를 고르라고 하는데 이미 플라스크와 가상환경을 만들었기 때문에 매뉴얼 컨피그레이션을 선택

 

3) 설치한 파이썬 버전을 선택

 

 

이렇게하면 웹앱이 생성완료

 

4. 세팅하기 

파이썬애니웨어에 올린 파이썬 파일과 방금 생성한 앱을 연결 시켜주는 것이다.

 

1) 소스코드를 연결시키기

프로젝트명 폴더명 적어줌

2) WSGI 컨피그레이션 수정

아래 링크를 클릭해서 헬로우월드 색션을 모두 지워줌

여기 부터 

여기까지 다 지워줌 

 

---------------------------

여기는 아래처럼 수정을 할 것이다.  (main.py에서 app을 가져옴)

참조 애플리케이션 팩토리 패턴을 사용한다면 

from 디렉토리네임 import app as application

아니면 함수로 실행하는 경우 app = create_app()

(플라스크팩토리팩턴)

 

2-02 플라스크 애플리케이션 팩토리

`[완성 소스]` : [github.com/pahkey/flaskbook/tree/2-02](https://github.com/pahkey/flaskbook/tree/2-0 ...

wikidocs.net

 

https://flask.palletsprojects.com/en/2.0.x/patterns/appfactories/

 

Application Factories — Flask Documentation (2.0.x)

Application Factories If you are already using packages and blueprints for your application (Modular Applications with Blueprints) there are a couple of really nice ways to further improve the experience. A common pattern is creating the application object

flask.palletsprojects.com

https://flask-sqlalchemy.palletsprojects.com/en/2.x/contexts/

 

Introduction into Contexts — Flask-SQLAlchemy Documentation (2.x)

Introduction into Contexts If you are planning on using only one application you can largely skip this chapter. Just pass your application to the SQLAlchemy constructor and you’re usually set. However if you want to use more than one application or creat

flask-sqlalchemy.palletsprojects.com

https://www.py4u.net/discuss/201960

 

How to get Flask-SQLAlchemy to work with the Application Factory Pattern

Answer #1: At the point that code is doing db.create_all(), models haven't been imported. Importing them has the side-effect of populating some data structures that SQLAlchemy uses behind the scenes. If the db.create_all() happens before SQLAlchemy knows a

www.py4u.net

 

 

 

3) 가상환경을 연결시켜주고

 

끝 실행해봄

 

이렇게 나와서 조금 놀랐지만 / 로 향하는 리퀘스트를 만들어 놓지 않아서 그런것 이였다.

작동결과 잘됬다.

 

 

※코드를 바꿔야하는 경우.

넷틀리파이에서는 깃에 푸쉬를 하면 자동으로 바뀐 코드가 적용이 되지만 

파이썬 애니웨어는 그렇지 않다. 그래서 

 

1) 소스 수정시 깃허브에 푸쉬

2) 파이썬 애니웨어에서 git pull를 한뒤 리로드를 하면 됨.

 

 

 

디비는 그냥 sqlite3를 임시로 쓰고 있는데 파이썬애니웨어에서

따로 디비를 생성할 필요가 없었다. 그냥 파일 하나가 아래 처럼 생성이된다. (아래 보이는 inventory.db는 sqlite파일이다.)

 

SQLAlchemy가 아닌를 사용하지 않고 mysql데이터베이스를 연결 하고 싶으면 아래 블로그에 잘 나와있다. 

https://seyeon-hello.tistory.com/2

 

pythonanywhere flask 배포하기

안녕하세요. 오늘은 pythonanywhere를 이용해서 파이썬 flask 웹 프레임워크를 배포하는 과정을 설명해드리겠습니다 ~ 장고는 관련 게시물이 많은데, 플라스크는 찾기 어렵더라구요. 그래서 간단하게

seyeon-hello.tistory.com

 

 

 

다음 글은 SQLAlchemy를 사용하여 my-sql DB를 연결하는 방법에 대해 설명하려고 한다.

 

댓글()

파이썬으로 Firestore 에 데이터 올리기

Computer 관심/Flask|2020. 11. 9. 22:54
반응형

플러터로 어플리케이션을 제작하였고, 어플리케이션에 필요한 데이터를 제공할 수 있는 서버가 필요했다.

파이어베이스의 파이어스토어는 쉽고 다양한 언어로 SDK를 제공한다. 그래서 플라스크를 사용하여 데이터를 올리는 간단한 서버를 만들었다. (굳이 서버로 만들지 않아도 됨....)

 

 

 

1. 웹사이트에서 서비스 어카운트 키 다운 받기

1) 파이어베이스에 들어가 새로운 프로젝트를 만든다.

2) 

 

 

3) service accounts 탭에 들어가면 아래와 같은 화면을 볼 수 있고

파이썬을 클릭한다.

4) Generate new private key 다운로드

 

5) 받은 json형식의 파일을 serviceAccountKey라고 이름을 변경한다.

 

6) 파이썬이 있는 폴더에 함께 놓는다.

 

 

2. firestore 만들기

1) 좌측 클라우드 파이어스토어를 클릭하면

서버를 선택할 수 있고 한국에서 빠른 실행을 할 수 있도록 south east2 를 선택했다.

 

2)

 

3. 파이썬 코드

firebase_admin과 Flask를 설치하고 아래와 같이 코드를 만든 뒤 실행하면

firestore에 대량으로 데이터를 업데이트 가능하다.

from flask import Flask,
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
import json

#서비스어카운트키 파일에 있는 json을 불러옴
cred = credentials.Certificate("./serviceAccountKey.json")
firebase_admin.initialize_app(cred)
firebase_db = firestore.client()

app = Flask(__name__)

# localhost:8000/add 로 들어갈시 작동
@app.route("/add", methods=['GET'])
def start():
	# firestore에 올릴 json 파일 불러드림
    with open('./stock_code.json', encoding='utf-8') as f:
        datas = json.load(f)
        
    # 아래는 테스트를 해보기 위한 데이터
    # datas = [{'name': '당근','code': '012345'},{'name': '오이','code': '012341'}]
    # print(datas)

    for data in datas:
    	# document() 라고 하면 자동으로 다큐먼트의 ID가 생성됨. 
        document = firebase_db.collection('콜렉션이름적기').document()
        document.set(data)
    return 'success'
    
# 공개아이피와 포트8000번 디버그 모드로 열기
if __name__ == '__main__':
    app.run(host='0.0.0.0',  port="8000", debug=True)

 

 

 

 

댓글()

플라스크 static 파일 경로(플라스크 이미지 url)

Computer 관심/Flask|2020. 3. 15. 01:01
반응형

플라스크로 이미지 주소를 전송하고 싶었다.

 

방법은 간단하다.(그런데 헤맷다..)

static이라는 폴더를 만든뒤

그 안에 이미지를 넣는 것이다.

 

체크를 하기 위해 플라스크를 돌려서 

localhost:5000/static/이라고 치면 not found가 나온다.

localhost:5000/static/파일이름.확장자 라고 url에 쳐야 스테틱 폴더에 넣어놓은 사진이 나온다.

 

댓글()