Flask-SQLAlchemy
MySQL是免費(fèi)開源軟件,大家可以自行搜索其官網(wǎng)(https://www.MySQL.com/downloads/)
測試MySQL是否安裝成功
在所有程序中,找到MySQL→MySQL Server 5.6下面的命令行工具,然后單擊輸入密碼后回車,就可以知道MySQL數(shù)據(jù)庫是否鏈接成功。
右擊桌面上的“計(jì)算機(jī)”,在彈出的快捷鍵菜單中選擇“屬性”|“高級系統(tǒng)設(shè)置”|“環(huán)境變量”,在path里面添加MySQL bin目錄的路徑。選擇環(huán)境變量,在環(huán)境變量中的path路徑下輸入你的MySQL路徑就行了。默認(rèn)安裝的路徑是C:\MySQL\MySQL Server 5.6\bin
安裝flask-sqlalchemy,安裝不了就更換豆瓣源
pip install flask-sqlalchemy
?對象-關(guān)系映射實(shí)質(zhì)
class Lib_card(db.Model): __tablename__ = 'lib_card' id = db.Column(db.Integer, primary_key=True, comment='id號') card_id = db.Column(db.Integer, nullable=False, comment = '借書證') book_id = db.Column(db.Integer, db.ForeignKey('book.id')) books = db.relationship('Book', backref=db.backref('cards'),uselist=False)
在Flask-SQLAlchemy中,插入、修改、刪除操作均由數(shù)據(jù)庫會話管理
需要一個配置config.py
USERNAME= 'root' #設(shè)置登錄賬號 PASSWORD= '930103' #設(shè)置登錄密碼 HOST= '127.0.0.1' #設(shè)置主機(jī)地址 PORT= '3306' #設(shè)置端口號 DATABASE= 'demo1' #設(shè)置訪問的數(shù)據(jù)庫 SQLALCHEMY_DATABASE_URI= f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}'#創(chuàng)建數(shù)據(jù)庫連接示例 #動態(tài)追蹤修改設(shè)置,如未設(shè)置只會提示警告 SQLALCHEMY_TRACK_MODIFICATIONS=False #查詢時會顯示原始SQL語句 SQLALCHEMY_ECHO= True
實(shí)例
from datetime import datetime from flask import Flask #導(dǎo)入Flask模塊 from flask_sqlalchemy import SQLAlchemy #導(dǎo)入SQLAlchemy模塊 import config #導(dǎo)入配置文件 app= Flask(__name__) #Flask初始化 app.config.from_object(config) #配置文件實(shí)例化 #初始化一個對象 db=SQLAlchemy(app) class Book(db.Model): __tablename__ = 'book' id = db.Column(db.Integer, primary_key = True,comment='id號') title = db.Column(db.String(50), nullable=False,comment='書名') publishing_office = db.Column(db.String(100), nullable=False,comment='出版社') isbn = db.Column(db.String(100), nullable=False, comment='isbn號') storage_time = db.Column(db.DateTime, default=datetime.now(), comment='入庫時間') class Lib_card(db.Model): __tablename__ = 'lib_card' id = db.Column(db.Integer, primary_key=True, comment='id號') card_id = db.Column(db.Integer, nullable=False, comment = '借書證') book_id = db.Column(db.Integer, db.ForeignKey('book.id')) books = db.relationship('Book', backref=db.backref('cards'),uselist=False) with app.app_context(): #測試數(shù)據(jù)庫連接是否成功 db.create_all() #創(chuàng)建數(shù)據(jù)庫 # book1= Book(id=9,title='智能導(dǎo)論', publishing_office='高等教育出版社',isbn='9787040479844') # db.session.add(book1) # db.session.commit() # result = Book.query.filter(Book.id == 9).first() # print(result.title) # agine = Book.query.filter(Book.title == result.title).all() # for i in agine: # print(i.id) # db.session.delete(result) # db.session.commit() # card1=Lib_card(card_id='18001', book_id='8') # card2=Lib_card(card_id='18002', book_id='8') # db.session.add(card1) # db.session.add(card2) # db.session.commit() book_query = Book.query.filter(Book.id == 9).first() lib_card_query = book_query.cards for i in lib_card_query: print(i.card_id) @app.route('/') def index(): return 'index' # if __name__== '__main__': # app.run(debug=True)
注意:一個表(模型)的定義必須要定義一個主鍵,這個主鍵一般為id。在定義了Lib_card類后,申明了一個外鍵,并且在relationship方法中使用uselist=False來約束其關(guān)系。book_id =db.Column(db.Integer,db.ForeignKey('book.id'))表示創(chuàng)建一個外鍵,類型要跟主表一樣,通過db.ForeignKey("user.id")與主表綁定books =db.relationship('Book',backref=db.backref('cards');uselist=False)表示Book可以根據(jù)Lib_card中的借書證查找到book表中的信息,backref="cards"表示book表可以直接通過cards查找到該書下的借書證號碼。
框架實(shí)例
建一個apps文件夾,添加一個admin包,admin包下創(chuàng)建三個py文件
#__init__.py #預(yù)加載模塊內(nèi)容 #其他地方調(diào)用的時候 可以直接from apps.admin import bp as admin_bp不用找到views from .views import bp
#forms.py from flask_wtf import FlaskForm from wtforms import * from wtforms.validators import * class NameForm(FlaskForm): username = StringField('用戶名',validators=[DataRequired()]) password = PasswordField('密碼',validators=[DataRequired()]) submit = SubmitField('提交')
#models.py from exts import db class User(db.Model): __tablename__ = 'jq_user' uid = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50), nullable=False, comment="用戶名") password = db.Column(db.String(100), nullable=False,comment="密碼") email = db.Column(db.String(50), nullable=False, unique=True, comment = "郵箱")
#views.py from flask import Blueprint, request, flash, render_template from apps.admin.forms import NameForm from apps.admin.models import User bp = Blueprint("admin",__name__) @bp.route("/admin",methods=['GET','POST']) def index(): form = NameForm() if request.method == 'POST': if form.validate_on_submit(): username = request.form.get('username') password = request.form.get('password') result = User.query.filter(User.username==username).first() if result and password == result.password: flash('登錄成功') else: return render_template('login.html', form=form, errormsg="登陸失敗") return render_template('login.html', form=form)
建一個文件夾templates,專門放login.html文件,通過render_template調(diào)用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <h1>用戶注冊登錄</h1> <form method="post" action="/test/admin"> {{ form.csrf_token()}} {{ form.username.label }}{{ form.username}} {{ form.password.label }}{{ form.password}} {{ form.submit }}{{errormsg}} {% for message in get_flashed_messages() %} {{ message }} {% endfor %} </form> </head> <body> </body> </html>
建一個app.py
from flask import Flask from apps.admin import bp as admin_bp from exts import db from apps.common import bp as common_bp from apps.front import bp as front_bp from apps.admin.models import User from apps.common.models import Book def create_app(): app = Flask(__name__) app.secret_key = '123321' #注冊藍(lán)圖,注冊時候可以設(shè)置前綴 app.register_blueprint(admin_bp,url_prefix="/test") app.register_blueprint(common_bp) app.register_blueprint(front_bp) app.config.from_object('config') # db.app = app db.init_app(app) return app if __name__ == '__main__': app = create_app() with app.app_context(): db.create_all() app.run(host="127.0.0.1",port=1314,debug=True)
建一個config.py文章來源:http://www.zghlxwxcb.cn/news/detail-413531.html
DEBUG=True USERNAME= 'root' #設(shè)置登錄賬號 PASSWORD= '930103' #設(shè)置登錄密碼 HOST= '127.0.0.1' #設(shè)置主機(jī)地址 PORT= '3306' #設(shè)置端口號 DATABASE= 'demo1' #設(shè)置訪問的數(shù)據(jù)庫 SQLALCHEMY_DATABASE_URI= f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}'#創(chuàng)建數(shù)據(jù)庫連接示例 #動態(tài)追蹤修改設(shè)置,如未設(shè)置只會提示警告 SQLALCHEMY_TRACK_MODIFICATIONS=False #查詢時會顯示原始SQL語句 SQLALCHEMY_ECHO= True
建一個exts.py文章來源地址http://www.zghlxwxcb.cn/news/detail-413531.html
#encoding:utf-8 from flask_sqlalchemy import SQLAlchemy db=SQLAlchemy()
到了這里,關(guān)于輕量級Web框架Flask(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!