


So schreiben Sie Python-Anwendungen mit Flask Blueprint und SQLAlchemy
May 06, 2023 pm 07:28 PMInstallationsvorbereitung
python3 -V && pip3 -V pip3 install pipenv
pipenv
pipenv shell
Die Umgebungskonfiguration von PyCharm wird hier nicht allzu ausführlich erl?utert. Hier finden Sie eine Erkl?rung des folgenden Codes.
Beginnen Sie mit dem üben
Das Prinzip von Flask besteht darin, den Blueprint und die App zu binden, um die Web-Routing-Funktion zu implementieren, wenn die App initialisiert wird. Die Implementierung des Routings ist der erste Schritt in allen Projekten.
Eintragsdatei
Bevor Sie das Projekt starten, definieren Sie eine Eintragsdatei, damit Anforderungen die App instanziieren k?nnen. Die Eintragsdatei muss lediglich die Konfigurationsdatei initialisieren, den Controller einführen, die Datenbank initialisieren und andere Vorg?nge ausführen.
def create_app(): app = Flask(__name__) # 導(dǎo)入config中的配置文件 app.config.from_object('app.config.setting') app.config.from_object('app.config.secure') return app
Das Urteil muss zur Startdatei hinzugefügt werden. Der Grund wird sp?ter erl?utert.
from app.app import create_app app = create_app() if __name__ == '__main__': app.run(debug =True,port=81,host= '0.0.0.0')
Routing
Flask ist eine Routing-Funktion, die mithilfe von Blueprints implementiert wird. Fügen Sie eine Methode zum Registrieren von Blueprints in der Eintragsdatei hinzu, um Einführung und Registrierung zu implementieren.
from flask import Blueprint login = Blueprint('login', __name__) @login.route('/login') def loginIndex(): return "login Hello"
Führen Sie das Blueprint-Modul ein, wenn die App-Instanz initialisiert wird.
from flask import Flask def create_app(): app = Flask(__name__) # 導(dǎo)入config中的配置文件 app.config.from_object('app.config.setting') app.config.from_object('app.config.secure') # 注冊并導(dǎo)入藍(lán)圖 register_blue(app) return app def register_blue(app): from app.api.login import login app.register_blueprint(login)
Optimieren Sie den Router.
Sie k?nnen jedem Router einen Loader hinzufügen und die Blueprints w?hrend der Initialisierung nacheinander in Flask laden, um den Zweck der Optimierung des Routers zu erreichen.
class BaseRoutes: def __init__(self, name): self.name = name self.loader = [] def route(self, rule, **options): def decorator(f): self.loader.append((f, rule, options)) return f return decorator def register(self, bp, url_prefix=''): # 依次注冊藍(lán)圖 for f, rule, options in self.loader: endpoint = options.pop("endpoint", f.__name__) bp.add_url_rule(url_prefix + rule, endpoint, f, **options)
Der in der API-Datei verwendete optimierte Ladecode lautet wie folgt:
from app.libs.BaseRoutes import BaseRoutes api = BaseRoutes('login') @api.route('/login/loginHandle', methods=['GET', 'POST']) def loginHandle(): return "login Hello"
SQLAlchemy
Nachdem wir das Routing des Webs abgeschlossen hatten, begannen wir, das Hinzufügen, L?schen, ?ndern und Abfragen der Datenbank weiter zu üben und zu untersuchen verwendet SQLAlchemy, um den Datenbankoptimierungsvorgang durchzuführen. Hier nehmen wir die MySQL-Datenbank als Beispiel.
Um SQLAlchemy verwenden zu k?nnen, müssen Sie zwei Komponenten installieren: Datenbank + Treiberpaket. Durch die Installation von Flask-SQLAlchemy + PyMySQL wird unsere Entwicklung einfacher und bequemer.
Definition der Datenbankklasse
Für alle Flask-Anwendungen und Plug-Ins müssen sie in App Power registriert werden und Objekte zum Betrieb verwenden. Definieren Sie zun?chst die Basisklasse für Datenbankoperationen und lassen Sie andere Module in Base registrieren.
?ffentliche Methoden in allen DBs werden in Base geschrieben, um den Prozess der Neuerfindung des Rades zu reduzieren.
Instanziieren Sie SQLAlchemy in Base
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Base(db.Model): # 忽略基類的主鍵 __abstract__ = True
Gew?hnliche Datenklassen erben die Basisklasse. Nehmen Sie die Benutzerklasse als Beispiel und führen Sie das Datenbankpaket ein, bevor Sie es verwenden.
from app.models.base import Base class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(50), nullable=False, default="") email = Column(String(120), nullable=False, default="") _password = Column('password',String(64)) @property def password(self): return self._password @password.setter def password(self, raw): self._password = generate_password_hash(raw)
Die Eintragsdatei l?dt die Datenbank.
Beim Laden von Daten müssen Sie laden In der Datenbankinitialisierungskonfiguration wird < code>SQLALCHEMY_DATABASE_URI angegeben und hat ein angegebenes Format. SQLALCHEMY_DATABASE_URI
指定,有指定的格式。
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/admin?charset=utf8'
SQLALCHEMY_DATABASE_URI =
數(shù)據(jù)庫+驅(qū)動名稱://用戶名:密碼@ip地址:端口號/數(shù)據(jù)庫名稱
def create_app(): app = Flask(__name__) app.config.from_object('app.config.secure') # 初始化數(shù)據(jù)庫 db.init_app(app) with app.app_context(): db.create_all() return app
說明和解釋一下with關(guān)鍵字的作用,在python中主要使用的是棧數(shù)據(jù)結(jié)構(gòu)來運行App實例,with關(guān)鍵字能很好的區(qū)分上下文,當(dāng)資源斷開時會自動釋放和回收,對程序能啟到優(yōu)化的作用。
mysql的驅(qū)動可以使用cymysql,也可以使用pymysql,網(wǎng)上使用pymysql的教程會偏多一點,使用驅(qū)動時,如果拿不定主意去github上使用stat數(shù)多的插件,選大眾型的,這樣解決方案也會多一點。
模塊中定義方法
model中可以定義模型,常量,直接操作數(shù)據(jù)庫的原子方法,也可以使用db.session
的形式來讀取數(shù)據(jù)。
from sqlalchemy import Column, Integer, String, SmallInteger from app.models.base import Base, db class tp_manager(Base): STATUS_NORMAL = 1 STATUS_STOP = 0 # ... @classmethod def get_manager_by_name(cls, username): r = cls.query.filter(cls.username == username, cls.status == cls.STATUS_NORMAL).one() return r @classmethod def get_db(cls): r = db.session.query(cls).filter(cls.status == cls.STATUS_NORMAL).all() return r
在路由中的使用
在路由中使用時,需要引入models中對應(yīng)的model包,下面是一個簡單使用的Demo,用戶的權(quán)限可以使用falsk-login組件來存儲用戶信息。
from flask import request, session, jsonify from app.libs.BaseRoutes import BaseRoutes from app.validators.form.login import LoginForm from app.models.admin.tp_manager import tp_manager api = BaseRoutes('login') @api.route('/login/loginHandle', methods=['POST']) def loginHandle(): form = LoginForm(request.form) if form.validate(): # 驗證通過的邏輯 r = tp_manager.get_manager_by_name(form.username.data) if r: msg = '操作成功' session['manager_id'] = r.id else: msg = '賬號和密碼錯誤' return jsonify({"code": 200, "data": [], "msg": msg}) else: # 錯誤暫時忽略... return form.errors
順便寫一句,flask在使用session前,在配置文件中需要配置SECRET_KEY
,不然會報錯,key值自定義即可。
SECRET_KEY = '需要加密的key值'
SQLAlchemy實現(xiàn)mysql編碼、列類型
在SQLAlchemy 對Mysql實現(xiàn)了基本操作以后,我發(fā)現(xiàn)設(shè)置出來的默認(rèn)值沒有生效,字符集編碼也被設(shè)置成了默認(rèn)的latin1
,優(yōu)化Mysql的列類型,實現(xiàn)Mysql連接池、接入mongo、redis等NoSql數(shù)據(jù)庫成了下一步要研究的問題。
默認(rèn)值和索引設(shè)置
python源碼包里的解釋很清晰 還附帶了例子 ,在Column
中是這樣設(shè)置的:
Column(Integer, index=True, nullable=False, server_default="0",comment="昵稱")
server_default
Orm設(shè)置初始化Mysql的值,unique指定的是否為唯一索引,default
是在SQLAlchemy進(jìn)行CURD操作時進(jìn)行的默認(rèn)值,server_defaul
和default
的值必須是字符串類型的。
index
是設(shè)置索引,nullable
設(shè)置是否為空,comment
設(shè)置的是備注信息。
兼容Mysql列類型
但是擺在眼前一個問題,你想使用tinyint類型,字符集怎么設(shè)置?
from sqlalchemy.dialects.mysql import VARCHAR, TEXT, BIGINT, INTEGER, SMALLINT, TINYINT, DECIMAL, FLOAT, \ DOUBLE, DATETIME, TIMESTAMP, DECIMAL
以使用最多的int和varchar為例,使用之前要導(dǎo)入對應(yīng)的包:
from sqlalchemy import Column, Index, Integer from sqlalchemy.dialects.mysql import VARCHAR, TEXT, BIGINT, INTEGER, SMALLINT, TINYINT, DECIMAL, FLOAT, \ DOUBLE, DATETIME, TIMESTAMP, DECIMAL from app.models.base import Base, db class wm_user_user(Base): STATUS_NORMAL = 1 __tablename__ = 'wm_user_user' user_status = Column(TINYINT(display_width=1,unsigned=True), nullable=False, server_default="1", comment="1為正常,0為審核中") user_nickname = Column(VARCHAR(length=50), index=True, nullable=False, comment="昵稱") # 添加配置設(shè)置編碼 __table_args__ = { 'mysql_charset': 'utf8mb4', 'mysql_collate': 'utf8mb4_general_ci' }
TINYINT類型中有三個參數(shù):
display_width 設(shè)置的是列類型寬度,設(shè)置完以后會顯示tinyint(1)
"""Construct a TINYINT. :param display_width: Optional, maximum display width for this number. :param unsigned: a boolean, optional. :param zerofill: Optional. If true, values will be stored as strings left-padded with zeros. Note that this does not effect the values returned by the underlying database API, which continue to be numeric. """
SQLALCHEMY_DATABASE_URI =
Datenbank + Treibername://Benutzername:Passwort@IP-Adresse:Portnummer/Datenbankname__tablename__ = 'wm_user_user' # ... __table_args__ = { 'mysql_charset': 'utf8mb4', 'mysql_collate': 'utf8mb4_general_ci' }Erkl?ren und erl?utern Sie die Funktion des Schlüsselworts with, das haupts?chlich in Python verwendet wird Die Stapeldatenstruktur wird zum Ausführen der App-Instanz verwendet. Das Schlüsselwort ?with“ kann den Kontext sehr gut unterscheiden. Wenn die Ressource getrennt wird, wird sie automatisch freigegeben und recycelt, wodurch das Programm optimiert werden kann. ????Der MySQL-Treiber kann cymysql oder pymysql verwenden. Wenn Sie sich nicht sicher sind, wie Sie den Treiber verwenden, verwenden Sie ein Plug-in mit einer gro?en Anzahl von Statistiknummern beliebt. Das ist die L?sung. Es wird noch ein bisschen mehr geben. ????Im Modul definierte Methoden????model kann Modelle, Konstanten und atomare Methoden definieren, die die Datenbank direkt betreiben, und Sie k?nnen auch die Form von
db.session
zum Lesen von Daten verwenden. ??rrreee??Verwendung im Routing????Bei Verwendung im Routing müssen Sie das entsprechende Modellpaket in Modelle einführen. Nachfolgend finden Sie eine einfache Demo, mit der Benutzerinformationen mit der Falsk-Login-Komponente gespeichert werden k?nnen. ??rrreee??übrigens, bevor Flask die Sitzung verwendet, müssen Sie SECRET_KEY
in der Konfigurationsdatei konfigurieren. Andernfalls wird ein Fehler gemeldet. Passen Sie einfach den Schlüsselwert an. ??rrreee??SQLAlchemy implementiert MySQL-Codierung und Spaltentypen????Nachdem SQLAlchemy grundlegende Vorg?nge in MySQL implementiert hatte, stellte ich fest, dass der Standardwertsatz nicht wirksam wurde und die Zeichensatzcodierung ebenfalls auf den Standardcode latin1</code gesetzt war > , die Optimierung des Spaltentyps von MySQL, die Implementierung des MySQL-Verbindungspools und der Zugriff auf NoSQL-Datenbanken wie Mongo und Redis sind zu Themen geworden, die im n?chsten Schritt untersucht werden müssen. ????Standardwert- und Indexeinstellungen????Die Erkl?rung im Python-Quellcodepaket ist sehr klar und enth?lt Beispiele. In <code>Spalte
ist es wie folgt festgelegt: ??rrreee??server_default</code > Orm-Einstellungen Initialisieren Sie den Wert von Mysql. Es gibt an, ob es sich um einen eindeutigen Index handelt, wenn SQLAlchemy CURD-Operationen ausführt /code> Der Wert muss vom Typ Zeichenfolge sein. ????<code>index
dient zum Festlegen des Index, nullable
dient zum Festlegen, ob er leer ist, und comment
dient zum Festlegen der Kommentarinformationen. ????Kompatibel mit dem MySQL-Spaltentyp????Aber es stellt sich uns die Frage: Wenn Sie den Typ tinyint verwenden m?chten, wie stellen Sie den Zeichensatz ein? ??rrreee??Nehmen Sie die am h?ufigsten verwendeten int und varchar als Beispiel. Vor der Verwendung müssen Sie das entsprechende Paket importieren: ??rrreee??Es gibt drei Parameter im TINYINT-Typ: ????display_width legt die Spaltentypbreite fest. tinyint wird angezeigt (1)
, ob die zweite vorzeichenlose Zahl ein positiver Wertebereich ist, ob die dritte Nullfüllung gefüllt ist, der Wert ein numerischer Typ ist, im Folgenden finden Sie die Anweisungen zur Verwendung des Quellcodes von TINYINT. ??rrreee?? Lassen Sie mich den String-Typ kurz mit varchar als Code vorstellen. Der String-Typ muss die String-L?nge explizit deklarieren, was durch die L?nge implementiert wird. Wenn der Wert von length nicht hinzugefügt wird, tritt bei der Initialisierung ein Fehler auf. ??自定義數(shù)據(jù)庫名和字符集編碼
__tablename__
設(shè)置的是自定義數(shù)據(jù)表名,底下的設(shè)置的是數(shù)據(jù)表字符集編碼,要使用utf8mb4編碼和utf8mb4_general_ci
編碼,這里就不做過多的解釋了。
__tablename__ = 'wm_user_user' # ... __table_args__ = { 'mysql_charset': 'utf8mb4', 'mysql_collate': 'utf8mb4_general_ci' }
Das obige ist der detaillierte Inhalt vonSo schreiben Sie Python-Anwendungen mit Flask Blueprint und SQLAlchemy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Benutzerspracheingabe wird erfasst und über die Mediarecorder-API des Front-End-JavaScript an das PHP-Backend gesendet. 2. PHP speichert das Audio als tempor?re Datei und ruft STTAPI (z. B. Google oder Baidu Voiceerkennung) auf, um sie in Text umzuwandeln. 3. PHP sendet den Text an einen KI -Dienst (wie OpenAigpt), um intelligente Antwort zu erhalten. 4. PHP ruft dann TTSAPI (wie Baidu oder Google Voice -Synthese) auf, um die Antwort in eine Sprachdatei umzuwandeln. 5. PHP streams die Sprachdatei zurück zum Spielen, um die Interaktion abzuschlie?en. Der gesamte Prozess wird von PHP dominiert, um eine nahtlose Verbindung zwischen allen Links zu gew?hrleisten.

Um die Textfehlerkorrektur und die Syntaxoptimierung mit AI zu realisieren, müssen Sie die folgenden Schritte ausführen: 1. W?hlen Sie ein geeignetes AI -Modell oder ein geeignetes AI -Modell oder ein geeignetes AI -Modell wie Baidu, Tencent API oder Open Source NLP -Bibliothek aus; 2. Rufen Sie die API über die Curl oder das Guzzle von PHP auf und verarbeiten Sie die Rückgabeergebnisse. 3.. Informationen zur Fehlerkorrektur in der Anwendung anzeigen und erm?glichen den Benutzern, zu w?hlen, ob sie angenommen werden sollen. 4. Verwenden Sie PHP-L und PHP_CODESNIFFER für die Syntaxerkennung und -codeoptimierung. 5. sammeln Sie kontinuierlich Feedback und aktualisieren Sie das Modell oder die Regeln, um den Effekt zu verbessern. Konzentrieren Sie sich bei der Auswahl von AIAPI auf die Bewertung von Genauigkeit, Reaktionsgeschwindigkeit, Preis und Unterstützung für PHP. Die Codeoptimierung sollte den PSR -Spezifikationen folgen, Cache vernünftigerweise verwenden, zirkul?re Abfragen vermeiden, den Code regelm??ig überprüfen und x verwenden

Verwenden Sie die Jointplot von Seeborn, um die Beziehung und Verteilung zwischen zwei Variablen schnell zu visualisieren. 2. Das grundlegende Streudiagramm wird durch sns.jointplot (data = tips, x = "total_bill", y = "tip", sort = "scatter") implementiert, das Zentrum ist ein Streudiagramm und das Histogramm wird auf der oberen und unteren und rechten Seite angezeigt. 3. Fügen Sie Regressionslinien und Dichteinformationen zu einer Art "Reg" hinzu und kombinieren Sie Marginal_KWS, um den Edge -Plot -Stil festzulegen. 4. Wenn das Datenvolumen gro? ist, wird empfohlen, "Hex" zu verwenden,

Um die KI -Sentiment -Computing -Technologie in PHP -Anwendungen zu integrieren, besteht der Kern darin, Cloud -Dienste AIAPI (wie Google, AWS und Azure) für die Stimmungsanalyse zu verwenden, Text über HTTP -Anfragen zu senden und zurückgegebene JSON -Ergebnisse zu speichern und emotionale Daten in die Datenbank zu speichern. Die spezifischen Schritte umfassen: 1. W?hlen Sie eine geeignete AI -Sentiment -Analyse -API unter Berücksichtigung von Genauigkeit, Kosten, Sprachunterstützung und Komplexit?t der Integration; 2. Senden Sie Guzzle oder Locken, um Anfragen zu senden, Stimmungspunkte, Beschriftungen und Intensit?tsinformationen zu speichern. 3.. Erstellen Sie ein visuelles Dashboard, um Priorit?tssortierung, Trendanalyse, Produkt -Iterationsrichtung und Benutzersegmentierung zu unterstützen. 4. Reagieren Sie auf technische Herausforderungen wie API -Anrufbeschr?nkungen und -zahlen

String -Listen k?nnen mit der join () -Methode wie '' .Join (Words) zusammengeführt werden, um "helloWorldfrompython" zu erhalten; 2. Die Zahlenlisten müssen vor dem Beitritt in Zeichenfolgen mit Karte (STR, Zahlen) oder [STR (x) ForxInnumbers] konvertiert werden. 3. Jede Typliste kann direkt in Zeichenfolgen mit Klammern und Zitaten umgewandelt werden, die zum Debuggen geeignet sind. 4. Benutzerdefinierte Formate k?nnen durch Generatorausdrücke in Kombination mit Join () implementiert werden, wie z.

Installieren Sie PYODBC: Verwenden Sie den Befehl pipinstallpyoDBC, um die Bibliothek zu installieren. 2. SQLServer verbinden: Verwenden Sie die Verbindungszeichenfolge, die Treiber, Server, Datenbank, UID/PWD oder Trusted_Connection über die Methode Pyodbc.Connect () und die SQL -Authentifizierung bzw. der Windows -Authentifizierung unterstützen; 3. überprüfen Sie den installierten Treiber: Führen Sie Pyodbc.Drivers () aus und filtern Sie den Treibernamen mit 'SQLServer', um sicherzustellen, dass der richtige Treiberame wie 'ODBCDRIVER17 für SQLServer' verwendet wird. 4. Schlüsselparameter der Verbindungszeichenfolge

Pandas.Melt () wird verwendet, um weite Formatdaten in ein langes Format umzuwandeln. Die Antwort besteht darin, neue Spaltennamen zu definieren, indem id_vars angegeben wird, die Identifikationsspalte beibehalten. 4.Value_name = 'Score' legt den neuen Spaltennamen des ursprünglichen Wertes fest und generiert schlie?lich drei Spalten, einschlie?lich Name, Betreff und Punktzahl.

PythoncanbeoptimizedFormemory-BoundoperationsByreducingoverheadThroughGeneratoren, effiziente Datastrukturen und ManagingObjectLifetimes.First, UseGeneratorsinSteadofListStoprocesslargedatasetasetasematatime, Vermeidung von loloadingeNthertomemory.Secondatasetasetematatime, Choos
