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

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

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

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 までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLおよびPHPMYADMIN:コア機能と関数 MySQLおよびPHPMYADMIN:コア機能と関数 Apr 22, 2025 am 12:12 AM

MySQLとPHPMyAdminは、強力なデータベース管理ツールです。 1)MySQLは、データベースとテーブルを作成し、DMLおよびSQLクエリを実行するために使用されます。 2)PHPMyAdminは、データベース管理、テーブル構造管理、データ操作、ユーザー許可管理のための直感的なインターフェイスを提供します。

Python vs. JavaScript:開発環境とツール Python vs. JavaScript:開発環境とツール Apr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

Python vs. C:重要な違​​いを理解します Python vs. C:重要な違​​いを理解します Apr 21, 2025 am 12:18 AM

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

Golang vs. Python:長所と短所 Golang vs. Python:長所と短所 Apr 21, 2025 am 12:17 AM

GolangisidealforBuildingsCalables Systemsduetoitsefficiency andConcurrency、Whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityand vastecosystem.golang'ssignencouragesclean、readisinediteNeditinesinedinediseNabletinedinedinedisedisedioncourase

Laravel vs. Python(フレームワーク付き):比較分析 Laravel vs. Python(フレームワーク付き):比較分析 Apr 21, 2025 am 12:15 AM

Laravelは、チームがPHPに精通しており、豊富な機能を必要とするプロジェクトに適していますが、Python Frameworksはプロジェクトの要件に依存します。 1.Laravelは、迅速な開発と柔軟性を必要とするプロジェクトに適したエレガントな構文とリッチな機能を提供します。 2。Djangoは、「バッテリー包含」の概念のため、複雑なアプリケーションに適しています。 3.Flaskは、高速プロトタイプや小規模プロジェクトに適しており、柔軟性が非常に高くなります。

MySQLの外国キーの目的を説明してください。 MySQLの外国キーの目的を説明してください。 Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

mysqlとmariadbを比較対照します。 mysqlとmariadbを比較対照します。 Apr 26, 2025 am 12:08 AM

MySQLとMariaDBの主な違いは、パフォーマンス、機能、ライセンスです。1。MySQLはOracleによって開発され、Mariadbはフォークです。 2. Mariadbは、高負荷環境でパフォーマンスを向上させる可能性があります。 3.MariaDBは、より多くのストレージエンジンと機能を提供します。 4.MySQLは二重ライセンスを採用し、MariaDBは完全にオープンソースです。既存のインフラストラクチャ、パフォーマンス要件、機能要件、およびライセンスコストを選択する際に考慮する必要があります。

SQL対MySQL:2つの関係を明確にします SQL対MySQL:2つの関係を明確にします Apr 24, 2025 am 12:02 AM

SQLはリレーショナルデータベースを管理するための標準言語であり、MySQLはSQLを使用するデータベース管理システムです。 SQLは、CRUD操作を含むデータベースと対話する方法を定義しますが、MySQLはSQL標準を実装し、ストアドプロシージャやトリガーなどの追加機能を提供します。

See all articles