백엔드 개발 파이썬 튜토리얼 플라스크와 mysql(python)을 연결하는 예제에 대한 자세한 설명

플라스크와 mysql(python)을 연결하는 예제에 대한 자세한 설명

Apr 26, 2017 am 11:09 AM
flask mysql python

Flask 기반 웹 애플리케이션 탄생에 관한 네 번째 기사입니다. 이 기사에서는 주로 Flask와 mysql을 상호 연결하는 방법을 소개합니다. 관심 있는 친구는

1장의 구현 부분을 참조하세요. 로그인 기능을 부분 기능이라고 부르는 이유는 사용자 이름과 비밀번호를 고정된 값으로 쓰는 것이 절대 허용되지 않기 때문입니다. 전체 기능에는 최소한 등록, 로그인, 비밀번호 수정 등이 필요하며 이를 제공해야 합니다. a 이러한 값을 데이터베이스에 저장하는 기능.

현재 주류 데이터베이스는 관계형 데이터베이스와 NoSql 데이터베이스라는 두 가지 유형으로 나누어지며, 중소 규모 시스템의 경우 두 데이터베이스의 성능과 사용 편의성이 동일하며 둘 다 좋은 선택입니다. .

기본 구성

여기서는 SQLAlchemy 데이터베이스 프레임워크의 플라스크 통합 패키지, 즉 플라스크-SQLAlchemy를 사용하여 데이터베이스 작업을 수행합니다.

SQLAlchemy는 데이터베이스 작업을 단순화하는 매우 좋은 프레임워크로, 높은 수준의 ORM과 낮은 수준의 SQL 기능을 제공하므로 사용이 매우 편리합니다.

설치 방법은 이전 유형과 동일하거나 pip 명령:

pip3.6 install flask-sqlalchemy
로그인 후 복사

설치가 완료된 후 기본 구성 부분을 수정하고 먼저 패키지를 가져옵니다.

from flask.ext.sqlalchemy import SQLAlchemy
로그인 후 복사

그런 다음 링크 문자열을 구성합니다:

app.config["SQLALCHEMY_DATABASE_URI"]='mysql://root:1234@localhost/cblog'
로그인 후 복사

요청이 완료된 후 변경 사항의 자동 커밋을 구성합니다:

app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"]=True
로그인 후 복사

SQLAlchemy 인스턴스화:

db=SQLAlchemy(app)
로그인 후 복사

모델 설정

설치가 완료된 후 계속해서 로그인 예제를 개선하고 default.py 파일에 사용자 모델(클래스) 및 역할 모델(연관 표시용)을 추가합니다

역할 클래스

class Role(db.Model): #需继承模型
 __tablename__="roles" #db中表明,如果不设置,则会与class同的默认名
 id=db.Column(db.Integer,primary_key=True) #SQLAlchemy要求必须有主键,一般命名为id即可
 name=db.Column(db.String(50),unique=True) #表示name为字符串,不重复
 users=db.relationship("User",backref='role') #关联user模型,并在user中添加反向引用(backref)
로그인 후 복사

사용자 클래스

class User(db.Model):
 __tablename__="users"
 id=db.Column(db.Integer,primary_key=True)
 username=db.Column(db.String(50),unique=True,index=True) #此列带索引
 password=db.Column(db.String(50))
 role_id=db.Column(db.Integer,db.ForeignKey("roles.id")) #外键指向roles表中的id列
로그인 후 복사

다음은 어떻게 해야 하는지 고려해야 합니다. 실행하기 편리해야 하고 로직 코드를 침범할 수 있는지 여부가 필요합니다. 예를 들어 db 상태를 확인하는 코드는 app.run에 매개변수로 전달됩니다. () 이때 셸이 유용합니다

구성 스크립트

Flask에서 명령줄 스크립트를 지원하려면 먼저 설치해야 합니다. 플라스크 스크립트 확장:

pip3.6 install flask-script
로그인 후 복사

default.py의 코드 수정:

from flask.ext.script import Manager
mamager=Manager(app)
....
if __name__=='__main__':
 #app.run(debug=True)
 mamager.run()
로그인 후 복사

수정 후 다시 실행:

python default.py
로그인 후 복사

성공적으로 실행되지 않은 것을 발견했습니다. 그런데 프롬프트가 있었습니다:


각각 shell(실행 스크립트), runserver(서비스 시작) 및 help 뒤에 매개변수가 필요하다는 것을 알 수 있습니다

아래 서비스 시작:

python default.py runserver
로그인 후 복사

서비스가 성공적으로 실행되었습니다

추가 데이터베이스 구성

그러나 이때 액세스할 때 사이트(127.0.0.1:5000)에서는 mysql 모듈이 없다는 500 오류가 나타납니다. 이유는 무엇입니까? 분명히 그 이유는 pip 명령을 사용하여 드라이버를 설치하기 때문입니다.

pip3.6 install MySQL-python
로그인 후 복사

오류가 발견되었으며 표시되는 내용은 다음과 같습니다(여기서는 win 시스템만 해당):

프롬프트에 따라 C++ 도구 패키지를 설치하고 프롬프트의 다운로드 주소를 따르세요

landinghub.visualstudio.com/visual-cpp-build-tools

다운로드가 완료되면 exe 파일에 바로 들어가고,

을 설치하고 다시 시작하여 MySQL-python을 설치하는 것이 여전히 불가능하다는 것을 Baidu를 통해 확인한 결과 MySQLdb가 발견되었습니다. 라이브러리는 python2.7까지만 지원하고 더 이상 3.x를 지원하지 않습니다. 그러면 다른 방법을 사용해야 합니다. PyMySQL 라이브러리를 사용하세요:

pip3.6 install PyMySQL
로그인 후 복사

그런 다음 default.py의 코드를 수정하고 두 줄을 추가합니다. :

import pymysql
pymysql.install_as_MySQLdb()
로그인 후 복사

소스 코드를 입력하고 다음 줄에 주의하세요.

sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
로그인 후 복사

는 성공적으로 mysql을 사용하고 연결할 수 있습니다.
브라우저에 연결을 입력하고 사이트에 올바르게 입력하세요.

다음으로 쉘을 사용하여 데이터베이스 테이블을 생성하고 default.py의 루트 디렉터리를 입력합니다.

python default.py shell
from default import db
db.create_all()
로그인 후 복사

이번에 오류가 보고되지 않으면, :


데이터베이스 마이그레이션

이때 문제가 발생합니다. 시간이 지나면 모델을 수정하면 DB에는 반영되지 않는데 수정하면 어떻게 해야 하나요? 현재로서는 매우 간단합니다.

db.drop_all()
db.create_all()
로그인 후 복사

하지만 이는 디버깅 중에만 사용됩니다. 이미 DB에 데이터가 있으면 이 시점에서는 확실히 견딜 수 없는 일입니다. 마이그레이션 플러그인 Migrate는 여전히 동일합니다.

pip3.6 install flask-migrate
로그인 후 복사

이전과 마찬가지로 설치 후 구성을 위해 default.py 파일을 수정합니다.

from flask.ext.migrate import Migrate,MigrateCommand
migrate=Migrate(app,db) #配置迁移
mamager.add_command("db",MigrateCommand) #配置迁移命令
로그인 후 복사

그런 다음 init 명령을 사용하여 마이그레이션 웨어하우스를 초기화합니다.

 python default.py db init
로그인 후 복사

명령줄에 다음이 표시됩니다.


그런 다음 마이그레이션 디렉터리를 추가합니다.

은 마이그레이션 파일 초기화가 완료되었음을 의미합니다.

migrate框架提供了一些命令来进行迁移操作,分别为(使用default.py文件举例):

#根据差异创建迁移
python default.py db migrate -m "说明"
#改动差异 
python default.py db upgrade
#取消差异改动
python default.py db downgrade
로그인 후 복사

回到表单

接下来看看登录如何与数据库关联起来,修改login方法内的代码:

@app.route("/login",methods=["POST"])
def loginPost():
 username=request.form.get("username","")
 password=request.form.get("password","")
 user=User.query.filter_by(username=username,password=password).first() #数据库查询
 if user is not None:
 session["user"]=username
 return render_template("/index.html",name=username,site_name='myblog')
 else:
 flash("您输入的用户名或密码错误")
 return render_template("/login.html") #返回的仍为登录页
로그인 후 복사

执行结果非常完美。

一些总结

下面是一些关于python和db相连的总结性的东西

数据类型

列选项

数据库操作

查询过滤器

经过这几章,登录功能已经基本完成,在下一章中将讲解用户注册的相关功能。

위 내용은 플라스크와 mysql(python)을 연결하는 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Linux 터미널에서 Python 버전을 볼 때 발생하는 권한 문제를 해결하는 방법은 무엇입니까? Linux 터미널에서 Python 버전을 볼 때 발생하는 권한 문제를 해결하는 방법은 무엇입니까? Apr 01, 2025 pm 05:09 PM

Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

한 데이터 프레임의 전체 열을 Python의 다른 구조를 가진 다른 데이터 프레임에 효율적으로 복사하는 방법은 무엇입니까? 한 데이터 프레임의 전체 열을 Python의 다른 구조를 가진 다른 데이터 프레임에 효율적으로 복사하는 방법은 무엇입니까? Apr 01, 2025 pm 11:15 PM

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

파이썬 매개 변수 주석이 문자열을 사용할 수 있습니까? 파이썬 매개 변수 주석이 문자열을 사용할 수 있습니까? Apr 01, 2025 pm 08:39 PM

파이썬 프로그래밍에서 Python 매개 변수 주석의 대체 사용법, 매개 변수 주석은 개발자가 기능을 더 잘 이해하고 사용하는 데 도움이되는 매우 유용한 기능입니다 ...

Python 스크립트는 특정 위치에서 Cursor 위치로 출력을 어떻게 제거합니까? Python 스크립트는 특정 위치에서 Cursor 위치로 출력을 어떻게 제거합니까? Apr 01, 2025 pm 11:30 PM

Python 스크립트는 특정 위치에서 Cursor 위치로 출력을 어떻게 제거합니까? Python 스크립트를 작성할 때 이전 출력을 커서 위치로 지우는 것이 일반적입니다 ...

복잡한 검증 코드를 깨뜨리기 위해 Python 및 OCR 기술을 사용하는 방법은 무엇입니까? 복잡한 검증 코드를 깨뜨리기 위해 Python 및 OCR 기술을 사용하는 방법은 무엇입니까? Apr 01, 2025 pm 10:18 PM

매일 네트워크 상호 작용에서 파이썬을 사용한 크래킹 검증 코드 탐색, 검증 코드는 자동화 된 프로그램의 악성 조작을 방지하는 일반적인 보안 메커니즘입니다 ...

파이썬 모래시 그래프 그리기 : 가변적 인 정의되지 않은 오류를 피하는 방법? 파이썬 모래시 그래프 그리기 : 가변적 인 정의되지 않은 오류를 피하는 방법? Apr 01, 2025 pm 06:27 PM

Python : 모래 시계 그래픽 도면 및 입력 검증을 시작 하기이 기사는 모래 시계 그래픽 드로잉 프로그램에서 Python 초보자가 발생하는 변수 정의 문제를 해결합니다. 암호...

웹 페이지 데이터를 얻을 때 동적로드 컨텐츠 누락 문제를 해결하는 방법은 무엇입니까? 웹 페이지 데이터를 얻을 때 동적로드 컨텐츠 누락 문제를 해결하는 방법은 무엇입니까? Apr 01, 2025 pm 11:24 PM

요청 라이브러리를 사용하여 웹 페이지 데이터를 크롤링 할 때 문제 및 솔루션이 발생합니다. 요청 라이브러리를 사용하여 웹 페이지 데이터를 얻을 때 때때로 ...

Django와 MySQL을 사용하여 수십만에서 2 백만에서 2 백만 건의 데이터를 처리 할 때, 4 코어 8G 메모리 서버는 어떤 종류의 캐시 솔루션을 선택해야합니까? Django와 MySQL을 사용하여 수십만에서 2 백만에서 2 백만 건의 데이터를 처리 할 때, 4 코어 8G 메모리 서버는 어떤 종류의 캐시 솔루션을 선택해야합니까? Apr 01, 2025 pm 11:36 PM

Django 및 MySQL을 사용하여 Django 및 MySQL 데이터베이스를 사용할 때 큰 데이터 볼륨을 처리합니다. 데이터 볼륨이 수십만에서 2 백만에 도달하면 ...

See all articles