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
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()
ブラウザに接続を入力し、サイトに正しくアクセスしてください。
次に、シェルを使用してデータベーステーブルを作成し、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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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