検索
ホームページバックエンド開発Python チュートリアルflaskとmysql(python)の接続例を詳しく解説

flaskとmysql(python)の接続例を詳しく解説

Apr 26, 2017 am 11:09 AM
flaskmysqlpython

flask をベースにした Web アプリケーションの 4 番目の記事が誕生しました。この記事では主に flask と mysql を相互接続する方法を紹介します。興味のある方は参考にしてください。 前章で実装したログイン部分を部分関数と呼びます。ユーザー名とパスワードを固定値として書き込むことは絶対に不可能であるため、機能全体では少なくとも登録、ログイン、パスワードの変更などが必要であり、これらの値をデータベースに保存する方法が必要です。

現在主流のデータベースは、リレーショナル データベースと NoSql データベースの 2 種類に分かれており、中小規模のシステムでは、2 つのデータベースのパフォーマンスと使いやすさは同等であり、どちらも良い選択肢となります。

基本構成


ここでは、SQLAlchemy データベース フレームワークの flask 統合パッケージ、つまり flask-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)

モデル設定


インストールが完了したら、ログイン例の改善を続け、デフォルトを変更します。 pyファイルにUserモデル(クラス)とRoleモデル(関連付けを表示するため)を追加します

Roleクラス

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)

Userクラス

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 でコマンドラインスクリプトをサポートしたい場合は、まず flask-script 拡張機能をインストールする必要があります:

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 エラーが表示されます。モジュール、これはなぜですか?明らかに、その理由は、mysql ドライバーがインストールされていないことです。ドライバーをインストールするには、pip コマンドを使用します。 C++ ツール パッケージは、プロンプトのダウンロード アドレス

landinghub.visualstudio.com/visual-cpp-build-tools に従ってください

ダウンロードが完了したら、直接 exe ファイルになります

、再起動してインストールします。 MySQL-python はまだ動作しないことがわかりました。Baidu 以降では、MySQLdb ライブラリは python2.7 までしかサポートされず、3.x はサポートされなくなりました。その場合は、他の方法を使用して PyMySQL ライブラリを使用する必要があります。 :

pip3.6 install MySQL-python

次に、default.py のコードを変更して 2 行を追加します:

pip3.6 install PyMySQL

ソース コードを入力し、次の行に注目してください:

import pymysql
pymysql.install_as_MySQLdb()

を使用して mysql に接続します。

ブラウザに接続を入力し、サイトに正しくアクセスしてください。

次に、シェルを使用してデータベーステーブルを作成し、default.pyルートディレクトリに入ります:

sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]

この時点でエラーが報告されない場合は、データベーステーブルが作成されるはずです:


Database移行

次に、この時点でモデルへの変更はデータベースに反映されません。では、変更した場合はどうすればよいでしょうか。現時点では、これも非常に簡単です:

python default.py shell
from default import db
db.create_all()

ただし、これはデバッグ中にのみ使用されます。データベースに既にデータがある場合、現時点ではデータベース移行プラグインの出番です。最初のことは同じで、インストールする必要があります:

db.drop_all()
db.create_all()

前と同様に、インストール後の構成のために、default.py ファイルを変更します:

pip3.6 install flask-migrate

次に、init コマンドを使用して移行ウェアハウスを初期化します
from flask.ext.migrate import Migrate,MigrateCommand
migrate=Migrate(app,db) #配置迁移
mamager.add_command("db",MigrateCommand) #配置迁移命令

コマンド ラインに次のように表示されます:

次に、移行ディレクトリを追加します:

は、移行ファイルが初期化されたことを示します。

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相连的总结性的东西

数据类型

列选项

数据库操作

查询过滤器

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

以上がflaskとmysql(python)の接続例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python:コンパイラまたはインタープリター?Python:コンパイラまたはインタープリター?May 13, 2025 am 12:10 AM

Pythonは解釈された言語ですが、コンパイルプロセスも含まれています。 1)Pythonコードは最初にBytecodeにコンパイルされます。 2)ByteCodeは、Python Virtual Machineによって解釈および実行されます。 3)このハイブリッドメカニズムにより、Pythonは柔軟で効率的になりますが、完全にコンパイルされた言語ほど高速ではありません。

ループvs whileループ用のpython:いつ使用するか?ループvs whileループ用のpython:いつ使用するか?May 13, 2025 am 12:07 AM

useaforloopwhenteratingoverasequenceor foraspificnumberoftimes; useawhileloopwhentinuninguntinuntilaConditionismet.forloopsareidealforknownownownownownownoptinuptinuptinuptinuptinutionsituations whileoopsuitsituations withinterminedationations。

Pythonループ:最も一般的なエラーPythonループ:最も一般的なエラーMay 13, 2025 am 12:07 AM

pythonloopscanleadtoErrorslikeinfiniteloops、ModifiningListsDuringiteration、Off-Oneerrors、Zero-dexingissues、およびNestededLoopinefficiencies.toavoidhese:1)use'i

ループの場合、およびPythonのループ:それぞれの利点は何ですか?ループの場合、およびPythonのループ:それぞれの利点は何ですか?May 13, 2025 am 12:01 AM

forloopsareadvastountousforknowterations and sequences、offeringsimplicityandeadability;

Python:編集と解釈に深く掘り下げますPython:編集と解釈に深く掘り下げますMay 12, 2025 am 12:14 AM

pythonusesahybridmodelofcompilation andtertation:1)thepythoninterpretercompilessourcodeodeplatform-indopent bytecode.2)thepythonvirtualmachine(pvm)thenexecuteTesthisbytecode、balancingeaseoputhswithporformance。

Pythonは解釈されたものですか、それとも編集された言語であり、なぜそれが重要なのですか?Pythonは解釈されたものですか、それとも編集された言語であり、なぜそれが重要なのですか?May 12, 2025 am 12:09 AM

pythonisbothintersedand compiled.1)it'scompiledtobytecode forportabalityacrossplatforms.2)bytecodeisthenは解釈され、開発を許可します。

ループ対pythonのループの場合:説明されたキーの違いループ対pythonのループの場合:説明されたキーの違いMay 12, 2025 am 12:08 AM

loopsareideal whenyouwhenyouknumberofiterationsinadvance、foreleloopsarebetterforsituationsは、loopsaremoreedilaConditionismetを使用します

ループのために:実用的なガイドループのために:実用的なガイドMay 12, 2025 am 12:07 AM

henthenumber ofiterationsisknown advanceの場合、dopendonacondition.1)forloopsareideal foriterating over for -for -for -saredaverseversives likelistorarrays.2)whileopsaresupasiable forsaresutable forscenarioswheretheloopcontinupcontinuspificcond

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境