【Python】Flask框架系列(二):安装、配置文件、增删改查
MySQL-python中間件的安裝
打開這里鏈接:https://www.lfd.uci.edu/~gohlke/pythonlibs/
這里32與64的選擇不是看操作系統的位數,而是看python的位數。我下載的是下面這個。
下載編譯后的 MySQL-python 包,然后進入包所在路徑,pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl包路徑,就好了。
小結
。。。和下面一樣的問題,pycharm里需要重新安裝。而且安裝的并不順暢。報錯如下:
error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27
解決方法:下載 VCForPython27.msi 。
地址: http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266
(Microsoft Visual C++ Compiler for Python 2.7)
上面這個解決了,又遇到新問題。
虛擬環境和真實環境的問題。好像有三個環境,兩個虛擬環境(在命令行中一個(flask-env)開頭,一個(venv)開頭),一個真實環境(沒有任何東西開頭),我一開始在(flask-env)開頭的虛擬環境和真實環境中(使用命令行)安裝了mysql-python模塊,但是pycharm(file -> setting -> project interpreter)中找不到。后來分析覺得應該是環境的問題,即安裝的環境和運行的環境不是同一個環境在默認的(venv)開頭的環境中又安裝了一遍,終于pycharm中可以看到了。
安裝完工。
參考了下面的回答。
參考鏈接:https://zhidao.baidu.com/question/750631798599298972.html
Flask-SQLAlchemy的介紹與安裝
安裝:使用pip install flask-sqlalchemy。安裝過程大概要等待三分鐘。安裝之后,我這里pycharm檢測不到,from flask_sqlalchemy import SQLAlchemy這行報錯,重啟pycharm也不行,用以下方式解決:
在pycharm file -> setting -> project interpreter看看是否有flask-sqlalchemy,發現沒有,就又點擊加號,安裝了一遍。就好了。
ORM舉例
使用ORM思想的好處是:不需要自己實現sql語句,底層已經封裝好了。
Flask-sqlalchemy的使用
做測試:打開http://127.0.0.1:5000/,看控制臺有沒有報錯。
警告:(3719),“UTF 8”目前是字符集UTF8MB3的別名,在將來的版本中將被UTF8MB4替換。請考慮使用UTF8MB4,以便明確無誤?!?
沒有解決。不知道這個警告會不會影響后面。
config.py
# encoding: utf-8# dialect+driver://username:password@host:port/databse DIALECT = 'mysql' DRIVER = 'mysqldb' USERNAME = 'root' PASSWORD = '123456' HOST = '127.0.0.1' PORT = '3306' DATABASE = 'ssm'SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE) SQLALCHEMY_TRACK_MODIFICATIONS = Falseapp.py
# encoding: utf-8from flask import Flask from flask_sqlalchemy import SQLAlchemy import configapp = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app)db.create_all()@app.route('/') def index():return 'index'if __name__ == '__main__':app.run(debug=True)SQLAlchemy模型與表映射——創建一個數據庫表(不需要自己寫sql語句)
示例:
app.py
# encoding: utf-8from flask import Flask from flask_sqlalchemy import SQLAlchemy import configapp = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app)db.create_all()class Article(db.Model):__tablename__ = 'article'id = db.Column(db.Integer, primary_key=True, autoincrement=True)title = db.Column(db.String(100), nullable=False)content = db.Column(db.Text, nullable=False)db.create_all()@app.route('/') def index():return 'index'if __name__ == '__main__':app.run(debug=True)運行結果:新建了article表
增加一條數據
app.py
# encoding: utf-8from flask import Flask from flask_sqlalchemy import SQLAlchemy import configapp = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app)db.create_all()class Article(db.Model):__tablename__ = 'article'id = db.Column(db.Integer, primary_key=True, autoincrement=True)title = db.Column(db.String(100), nullable=False)content = db.Column(db.Text, nullable=False)db.create_all()@app.route('/') def index():# 增加article1 = Article(title='aaa', content='bbb')db.session.add(article1)# 事務提交db.session.commit()return '運行成功'if __name__ == '__main__':app.run(debug=True)訪問網頁之后的執行效果
查詢一條數據
表中已有數據如下
app.py
執行后輸出
[<Article 1>, <Article 2>, <Article 3>, <Article 4>, <Article 5>, <Article 6>] aaa bbb ccc vvv eee uuu修改一條數據
app.py
# encoding: utf-8from flask import Flask from flask_sqlalchemy import SQLAlchemy import configapp = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app)db.create_all()class Article(db.Model):__tablename__ = 'article'id = db.Column(db.Integer, primary_key=True, autoincrement=True)title = db.Column(db.String(100), nullable=False)content = db.Column(db.Text, nullable=False)db.create_all()@app.route('/') def index():# 增加# article1 = Article(title='aaa', content='bbb')# db.session.add(article1)# 事務提交# db.session.commit()# 查找# select *from article where article.title='aaa';# result = Article.query.filter(Article.title == 'aaa').all() #按條件查詢# result = Article.query.filter().all() # 查詢全部# print result# for a in result:# print a.title# 修改# 1.先把要修改的數據查找出來article1 = Article.query.filter(Article.title == 'aaa').first()# 2.修改數據article1.title = 'newtitle'# 3.事務的提交db.session.commit()return '運行成功'if __name__ == '__main__':app.run(debug=True)修改后
刪除一條數據
運行前
運行后
app.py
# encoding: utf-8from flask import Flask from flask_sqlalchemy import SQLAlchemy import configapp = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app)db.create_all()class Article(db.Model):__tablename__ = 'article'id = db.Column(db.Integer, primary_key=True, autoincrement=True)title = db.Column(db.String(100), nullable=False)content = db.Column(db.Text, nullable=False)db.create_all()@app.route('/') def index():# 增加# article1 = Article(title='aaa', content='bbb')# db.session.add(article1)# 事務提交# db.session.commit()# 查找# select *from article where article.title='aaa';# result = Article.query.filter(Article.title == 'aaa').all() #按條件查詢# result = Article.query.filter().all() # 查詢全部# print result# for a in result:# print a.title# 修改# 1.先把要修改的數據查找出來# article1 = Article.query.filter(Article.title == 'aaa').first()# 2.修改數據# article1.title = 'newtitle'# 3.事務的提交# db.session.commit()# 刪除# 1.把要刪除的數據查找出來article1 = Article.query.filter(Article.title == 'bbb').first()# 2.把要刪除的數據刪除掉db.session.delete(article1)# 3.事務提交db.session.commit()return '運行成功'if __name__ == '__main__':app.run(debug=True)Flask-Script的介紹與安裝
需要新建manage.py文件(與Django類似)
示例1
運行方式
示例2:將子命令通過add_command('', )引入到manage.py中
運行方式
- 這里的db對應的是manage.py第16行中的第一個參數名稱db,而init / migrate相當于db的子命令,也就是從db_script.py中引入的子命令
分開models和解決循環引用
循環引用問題:如下,運行時會提示cannot import name Article
解決方式:
關于 from app import… 的理解:https://segmentfault.com/q/1010000004418410/a-1020000011273279
Flask-Migrate的介紹
python的self的理解
#!/usr/bin/python # -*- coding: UTF-8 -*-class Employee:'所有員工的基類'empCount = 0def __init__(self, name, salary):self.name = nameself.salary = salaryEmployee.empCount += 1def displayCount(self):print "Total Employee %d" % Employee.empCountdef displayEmployee(self):print "Name : ", self.name, ", Salary: ", self.salary"創建 Employee 類的第一個對象" emp1 = Employee("Zara", 2000) "創建 Employee 類的第二個對象" emp2 = Employee("Manni", 5000) emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCountpython的self就與c++、java的this相同,是實例的引用。self也可以換成其他名稱。 只不過python的語法,需要把self放在類實例方法的第一個參數而已
示例
輸出
<__main__.Test instance at 0x10d066878> __main__.TestFlask中的session和cookie
總結
以上是生活随笔為你收集整理的【Python】Flask框架系列(二):安装、配置文件、增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在JS中如何判断undefined和nu
- 下一篇: Jquery中的$(document).