日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置

發(fā)布時(shí)間:2025/3/12 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【1.初級(jí)版】

flask-scrpit安裝。

使用flask-scrpit可以創(chuàng)建命令,并在Flask的應(yīng)用上下文中執(zhí)行,因?yàn)檫@樣才能對(duì)Flask對(duì)象進(jìn)行修改。Flask Script自帶了一些默認(rèn)的命令,可以運(yùn)行服務(wù)器或者開(kāi)啟帶應(yīng)用上下文的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

安裝成功,開(kāi)始寫(xiě)腳本。

from flask_script import Manager, Server

from main import app

然后把你的app傳給Manager對(duì)象,以初始化Flask Script:

manager = Manager(app)

現(xiàn)在我們來(lái)添加一些命令。這里運(yùn)行的服務(wù)器跟通過(guò)main.py運(yùn)行的普通開(kāi)發(fā)服務(wù)器是一樣的。make_shell_context函數(shù)會(huì)創(chuàng)建一個(gè)Python命令行,并且在應(yīng)用上下文中執(zhí)行。返回的字典告訴Flask Script在打開(kāi)命令行時(shí)進(jìn)行一些默認(rèn)的導(dǎo)入工作。

manager.add_command("server", Server())

@manager.shell

def make_shell_context():

return dict(app=app)

通過(guò)manage.py運(yùn)行命令行在將來(lái)會(huì)十分必要,因?yàn)橐恍〧lask擴(kuò)展只有在Flask應(yīng)用對(duì)象被創(chuàng)建之后才會(huì)被初始化。直接運(yùn)行默認(rèn)的Python命令行會(huì)令這些擴(kuò)展返回錯(cuò)誤。

然后,在文件結(jié)尾添加如下代碼,這是Python的標(biāo)準(zhǔn)方式,用來(lái)限制僅在用戶(hù)直接運(yùn)行文件的時(shí)候,才執(zhí)行上面的代碼:

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()

[運(yùn)行服務(wù)器]

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安裝,運(yùn)行完成。

【2.進(jìn)階版-數(shù)據(jù)庫(kù)連接】

安裝Flask SQLAlchemy。SQLAlchemy在最底層包裝了數(shù)據(jù)庫(kù)操作接口,在最上層提供了對(duì)象關(guān)系映射(ORM)。ORM是在基于不同的數(shù)據(jù)結(jié)構(gòu)和系統(tǒng)類(lèi)型的數(shù)據(jù)源之間傳遞和轉(zhuǎn)換數(shù)據(jù)的技術(shù)。在這里,它用來(lái)把大量不同類(lèi)型的數(shù)據(jù)庫(kù)中的數(shù)據(jù),轉(zhuǎn)換成python對(duì)象的集合。同時(shí),像Python這樣的語(yǔ)言,允許你在不同的對(duì)象之間建立引用,讀取和設(shè)置它們的屬性;而SQLAlchemy這樣的ORM,能為你將對(duì)象操作轉(zhuǎn)換為傳統(tǒng)的數(shù)據(jù)庫(kù)操作。

(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"

這個(gè)數(shù)據(jù)庫(kù)連接方式,當(dāng)時(shí)是看攻略寫(xiě)的,并不了解背后知識(shí),結(jié)果后面有很大的麻煩。

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會(huì)假設(shè)你的表名就模型類(lèi)型的小寫(xiě)版本。這個(gè)例子里,表名就是user。

#但是,如果你想給表起個(gè)別的名字,你可以給類(lèi)添加'__tablename__'的類(lèi)屬性。

##另外,通過(guò)采用這種方式,你也可以使用在數(shù)據(jù)庫(kù)中已經(jīng)存在的表,只需把表名設(shè)為該屬性的值:

##__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對(duì)象,以初始化Flask Script:

manager = Manager(app)

#現(xiàn)在我們來(lái)添加一些命令。這里運(yùn)行的服務(wù)器跟通過(guò)main.py運(yùn)行的普通開(kāi)發(fā)服務(wù)器是一樣的。

#make_shell_context函數(shù)會(huì)創(chuàng)建一個(gè)Python命令行,并且在應(yīng)用上下文中執(zhí)行。

#返回的字典告訴Flask Script在打開(kāi)命令行時(shí)進(jìn)行一些默認(rèn)的導(dǎo)入工作。

manager.add_command("server", Server())

@manager.shell

def make_shell_context():

#return dict(app=app)

#注意:每新增一個(gè)模型,都會(huì)在這個(gè)地方導(dǎo)入并添加到dict中。

return dict(app=app, db=db, User=User)

#通過(guò)manage.py運(yùn)行命令行在將來(lái)會(huì)十分必要,因?yàn)橐恍〧lask擴(kuò)展只有在Flask應(yīng)用對(duì)象被創(chuàng)建之后才會(huì)被初始化。直接運(yùn)行默認(rèn)的Python命令行會(huì)令這些擴(kuò)展返回錯(cuò)誤。

#然后,在文件結(jié)尾添加如下代碼,這是Python的標(biāo)準(zhǔn)方式,用來(lái)限制僅在用戶(hù)直接運(yùn)行文件的時(shí)候,才執(zhí)行上面的代碼:

if __name__ == "__main__":

[運(yùn)行服務(wù)器]

(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)

[運(yùn)行客戶(hù)端]

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'

執(zhí)行db.create_all()出錯(cuò)了。查攻略,缺少mysql的python連接庫(kù)。好吧,開(kāi)始下載mysql-python庫(kù)。。

(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

又出錯(cuò)了,缺少C++類(lèi)庫(kù)。好吧,下載winsdk_web.exe。再安裝。

又出錯(cuò)了,有完沒(méi)完,缺少framework4。再下載,dotNetFx40_Full_x86_x64,安裝,總算不報(bào)錯(cuò)了。

現(xiàn)在可以安裝winsdk_web.exe,需要n久時(shí)間,慢慢等吧。

趁這段時(shí)間,補(bǔ)一下python和mysql連接的知識(shí)吧,查了一篇文章https://www.zhihu.com/question/29719547,終于搞明白了。原來(lái)有2種方式,我現(xiàn)在用的是第一種,mysql-python庫(kù)。連接代碼,SQLALCHEMY_DATABASE_URI = "mysql://root:666666@localhost/mytest"

另外一種是pymysql庫(kù),反正現(xiàn)在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"

再運(yùn)行db.create_all(),不報(bào)錯(cuò)了。

去mysql的mytest數(shù)據(jù)庫(kù),show tables,user表創(chuàng)建成功了~~~

以前從來(lái)沒(méi)有研究過(guò)python連接mysql數(shù)據(jù)庫(kù),所以沒(méi)有經(jīng)驗(yàn)。不然不會(huì)那么折騰了,直接用pymysql方式簡(jiǎn)單多了。果斷放棄winsdk_web.exe安裝,等以后有空再?lài)L試mysql-python庫(kù)。

【后續(xù)】

shell中再運(yùn)行了幾個(gè)命令

增加數(shù)據(jù)

>>> user = User(username='fake_name')

>>> db.session.add(user)

>>> db.session.commit()

讀取數(shù)據(jù)

>>> users = User.query.all()

>>> users

[]

修改數(shù)據(jù)

>>> User.query.filter_by(username='fake_name').update({'password':'test'})

1

>>> db.session.commit()

刪除數(shù)據(jù)

>>> user = User.query.filter_by(username='fake_name').first()

>>> db.session.delete(user)

>>> db.session.commit()

總結(jié)

以上是生活随笔為你收集整理的flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。