flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置
【1.初級版】
flask-scrpit安裝。
使用flask-scrpit可以創建命令,并在Flask的應用上下文中執行,因為這樣才能對Flask對象進行修改。Flask Script自帶了一些默認的命令,可以運行服務器或者開啟帶應用上下文的Python命令行。
env) D:\python\flask>pip install flask-script
Collecting flask-script
Downloading Flask-Script-2.0.6.tar.gz (43kB)
47% |███████████████▏ | 20kB 166kB/s eta 0:00
71% |██████████████████████▉ | 30kB 221kB/s e
94% |██████████████████████████████▍ | 40kB 1
100% |████████████████████████████████| 51kB
218kB/s
Requirement already satisfied: Flask in d:\python\flask\env\lib\site-packages (f
rom flask-script)
Requirement already satisfied: Werkzeug>=0.7 in d:\python\flask\env\lib\site-pac
kages (from Flask->flask-script)
Requirement already satisfied: itsdangerous>=0.21 in d:\python\flask\env\lib\sit
e-packages (from Flask->flask-script)
Requirement already satisfied: click>=2.0 in d:\python\flask\env\lib\site-packag
es (from Flask->flask-script)
Requirement already satisfied: Jinja2>=2.4 in d:\python\flask\env\lib\site-packa
ges (from Flask->flask-script)
Requirement already satisfied: MarkupSafe>=0.23 in d:\python\flask\env\lib\site-
packages (from Jinja2>=2.4->Flask->flask-script)
Building wheels for collected packages: flask-script
Running setup.py bdist_wheel for flask-script ... done
Stored in directory: C:\Users\test003\AppData\Local\pip\Cache\wheels\35\38\2a\
5a4aef4aa51913c135f5d2ff6f8552ad0db06667cd3e48ef2d
Successfully built flask-script
Installing collected packages: flask-script
Successfully installed flask-script-2.0.6
安裝成功,開始寫腳本。
from flask_script import Manager, Server
from main import app
然后把你的app傳給Manager對象,以初始化Flask Script:
manager = Manager(app)
現在我們來添加一些命令。這里運行的服務器跟通過main.py運行的普通開發服務器是一樣的。make_shell_context函數會創建一個Python命令行,并且在應用上下文中執行。返回的字典告訴Flask Script在打開命令行時進行一些默認的導入工作。
manager.add_command("server", Server())
@manager.shell
def make_shell_context():
return dict(app=app)
通過manage.py運行命令行在將來會十分必要,因為一些Flask擴展只有在Flask應用對象被創建之后才會被初始化。直接運行默認的Python命令行會令這些擴展返回錯誤。
然后,在文件結尾添加如下代碼,這是Python的標準方式,用來限制僅在用戶直接運行文件的時候,才執行上面的代碼:
if __name__ == "__main__":
class Config(object):
pass
class ProdConfig(Config):
pass
class DevConfig(Config):
DEBUG = True
from flask import Flask
from config import DevConfig
app = Flask(__name__)
app.config.from_object(DevConfig)
@app.route('/')
def home():
return '
Hello World!
'if __name__ == '__main__':
app.run()
[運行服務器]
D:\python\flask>env\Scripts\activate
(env) D:\python\flask>python example2\manage.py server
* Restarting with stat
* Debugger is active!
* Debugger PIN: 104-739-710
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
[命令行方式連接]
D:\python\flask>env\Scripts\activate
(env) D:\python\flask>python example2\manage.py shell
>>> app
>>>
以上,Flask和Flask-script安裝,運行完成。
【2.進階版-數據庫連接】
安裝Flask SQLAlchemy。SQLAlchemy在最底層包裝了數據庫操作接口,在最上層提供了對象關系映射(ORM)。ORM是在基于不同的數據結構和系統類型的數據源之間傳遞和轉換數據的技術。在這里,它用來把大量不同類型的數據庫中的數據,轉換成python對象的集合。同時,像Python這樣的語言,允許你在不同的對象之間建立引用,讀取和設置它們的屬性;而SQLAlchemy這樣的ORM,能為你將對象操作轉換為傳統的數據庫操作。
(env) D:\python\flask>pip install flask-sqlalchemy
Collecting flask-sqlalchemy
Downloading Flask_SQLAlchemy-2.3.2-py2.py3-none-any.whl
Collecting SQLAlchemy>=0.8.0 (from flask-sqlalchemy)
Downloading SQLAlchemy-1.1.15.tar.gz (5.2MB)
38% |████████████▏ | 2.0MB 46kB/s eta 0:01:10
...省略...
99% |████████████████████████████████| 5.2MB
100% |████████████████████████████████| 5.2M
B 28kB/s
Requirement already satisfied: Flask>=0.10 in d:\python\flask\env\lib\site-packa
ges (from flask-sqlalchemy)
Requirement already satisfied: Werkzeug>=0.7 in d:\python\flask\env\lib\site-pac
kages (from Flask>=0.10->flask-sqlalchemy)
Requirement already satisfied: click>=2.0 in d:\python\flask\env\lib\site-packag
es (from Flask>=0.10->flask-sqlalchemy)
Requirement already satisfied: Jinja2>=2.4 in d:\python\flask\env\lib\site-packa
ges (from Flask>=0.10->flask-sqlalchemy)
Requirement already satisfied: itsdangerous>=0.21 in d:\python\flask\env\lib\sit
e-packages (from Flask>=0.10->flask-sqlalchemy)
Requirement already satisfied: MarkupSafe>=0.23 in d:\python\flask\env\lib\site-
packages (from Jinja2>=2.4->Flask>=0.10->flask-sqlalchemy)
Building wheels for collected packages: SQLAlchemy
Running setup.py bdist_wheel for SQLAlchemy ... done
Stored in directory: C:\Users\test003\AppData\Local\pip\Cache\wheels\
b67f1ab4d5a08d3c3ad3edfc1e60e09f9263536aa3dc91824c
Successfully built SQLAlchemy
Installing collected packages: SQLAlchemy, flask-sqlalchemy
Successfully installed SQLAlchemy-1.1.15 flask-sqlalchemy-2.3.2
class Config(object):
pass
class ProdConfig(Config):
pass
class DevConfig(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql://root:666666@localhost/mytest"
這個數據庫連接方式,當時是看攻略寫的,并不了解背后知識,結果后面有很大的麻煩。
2.main_mysql.py文件
from config import DevConfig
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object(DevConfig)
db = SQLAlchemy(app)
class User(db.Model):
#SQLAlchemy會假設你的表名就模型類型的小寫版本。這個例子里,表名就是user。
#但是,如果你想給表起個別的名字,你可以給類添加'__tablename__'的類屬性。
##另外,通過采用這種方式,你也可以使用在數據庫中已經存在的表,只需把表名設為該屬性的值:
##__tablename__ = 'user_table_name'
id = db.Column(db.Integer(), primary_key=True)
username = db.Column(db.String(255))
password = db.Column(db.String(255))
def __init__(self, username):
self.username = username
def __repr__(self):
return "".format(self.username)
from flask_script import Manager, Server
from main_mysql import app, db, User
#把你的app傳給Manager對象,以初始化Flask Script:
manager = Manager(app)
#現在我們來添加一些命令。這里運行的服務器跟通過main.py運行的普通開發服務器是一樣的。
#make_shell_context函數會創建一個Python命令行,并且在應用上下文中執行。
#返回的字典告訴Flask Script在打開命令行時進行一些默認的導入工作。
manager.add_command("server", Server())
@manager.shell
def make_shell_context():
#return dict(app=app)
#注意:每新增一個模型,都會在這個地方導入并添加到dict中。
return dict(app=app, db=db, User=User)
#通過manage.py運行命令行在將來會十分必要,因為一些Flask擴展只有在Flask應用對象被創建之后才會被初始化。直接運行默認的Python命令行會令這些擴展返回錯誤。
#然后,在文件結尾添加如下代碼,這是Python的標準方式,用來限制僅在用戶直接運行文件的時候,才執行上面的代碼:
if __name__ == "__main__":
[運行服務器]
(env) D:\python\flask\example2>python manage.py server
D:\python\flask\env\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADepre
cationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this
warning.
'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
* Restarting with stat
D:\python\flask\env\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADepre
cationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this
warning.
'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
* Debugger is active!
* Debugger PIN: 104-739-710
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
[運行客戶端]
env) D:\python\flask\example2>python manage.py shell
D:\python\flask\env\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADepre
cationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will
be disabled by default in the future. Set it to True or False to suppress this
warning.
'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
>>> db.create_all()
...省略...
File "D:\python\flask\env\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.
py", line 110, in dbapi
return __import__('MySQLdb')
ImportError: No module named 'MySQLdb'
執行db.create_all()出錯了。查攻略,缺少mysql的python連接庫。好吧,開始下載mysql-python庫。。
(env) D:\python\flask\example2>pip install mysql-python
...省略...
error: Microsoft Visual C++ 10.0 is required. Get it with "Microsoft Windows S
----------------------------------------
Failed building wheel for mysql-python
Running setup.py clean for mysql-python
Failed to build mysql-python
Installing collected packages: mysql-python
Running setup.py install for mysql-python ... error
又出錯了,缺少C++類庫。好吧,下載winsdk_web.exe。再安裝。
又出錯了,有完沒完,缺少framework4。再下載,dotNetFx40_Full_x86_x64,安裝,總算不報錯了。
現在可以安裝winsdk_web.exe,需要n久時間,慢慢等吧。
趁這段時間,補一下python和mysql連接的知識吧,查了一篇文章https://www.zhihu.com/question/29719547,終于搞明白了。原來有2種方式,我現在用的是第一種,mysql-python庫。連接代碼,SQLALCHEMY_DATABASE_URI = "mysql://root:666666@localhost/mytest"
另外一種是pymysql庫,反正現在winsdk_web.exe安裝等待中,嘗試一下吧。
(env) D:\python\flask>pip install pymysql3
...省略...
Successfully built pymysql3
Installing collected packages: pymysql3
Successfully installed pymysql3-0.5
config.py文件中,修改代碼如下:
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:666666@localhost/mytest"
再運行db.create_all(),不報錯了。
去mysql的mytest數據庫,show tables,user表創建成功了~~~
以前從來沒有研究過python連接mysql數據庫,所以沒有經驗。不然不會那么折騰了,直接用pymysql方式簡單多了。果斷放棄winsdk_web.exe安裝,等以后有空再嘗試mysql-python庫。
【后續】
shell中再運行了幾個命令
增加數據
>>> user = User(username='fake_name')
>>> db.session.add(user)
>>> db.session.commit()
讀取數據
>>> users = User.query.all()
>>> users
[]
修改數據
>>> User.query.filter_by(username='fake_name').update({'password':'test'})
1
>>> db.session.commit()
刪除數據
>>> user = User.query.filter_by(username='fake_name').first()
>>> db.session.delete(user)
>>> db.session.commit()
總結
以上是生活随笔為你收集整理的flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 删除n天前文件_Linux
- 下一篇: python有序队列_【python】c