Flask連線資料庫打怪升級之旅
前言
在初學 Flask 的時候,在資料庫連線這部分也跟每個初學者一樣。但是隨著工作中專案接手的多了,程式碼寫的多了,歷練的多了也就有了自己的經驗和技巧。在對這塊兒程式碼不斷的進行升級改造後,整理了自己在連線資料庫這部分的的一個學習經驗,也就是我們今天分享的連線資料庫部分的打怪升級之旅。希望可以為大家在學習 Python 的路上提供一些參考。
初級階段
首先安裝 Mysql 擴充套件包
yum install python-dev
pip install MySQL-python
建立資料庫連結
import MySQLdb as mysql
db=mysql.connect(user='root',passwd='123456',db='reboot',charset='utf8')
cur=db.cursor()
開啟打怪升級之路
在日常開發中,連線資料庫最多的應用場景就是,查詢所有資料和查詢單條資料。就以查詢所有資料場景為例。
小白版本——在後端憑接表格,傳到前端渲染
cur.execute('select * from host')
str = ""
# 結果以元組巢狀的形式返回 ((id,name), (id,iname),……)
result= cur.fetchall():
# 迴圈父元祖,然後按照索引依次獲取到每列的值,
for c in result:
str = '<tr><td>%s</td> \
<td>%s</td> \
<td>%s</td> \
<td>%s</td> \
<td><span class="update-btn" data-id="%s">update</span></td> \
<td><span class="delete-btn" data-id="%s">delete</span></td> \
</tr>' % (c[0],c[1],c[2],c[3],c[0],c[0])
str += str
cur.close()
return jsondumps(str)
進階階段
第一關——後端消滅 HTML 標籤
後端:
# 執行sql
cur.execute('select * from user')
result = cur.fetchall():
return render_template("index.html",result=result)
前端:
<table border="1px">
<tr>
<td>ID</td>
<td>user</td>
<td>passwd</td>
<td>sex</td>
<td>phone</td>
<td>操作</td>
</tr>
{% for user in result %}
<tr>
<td>{{user[0]}}</td>
<td>{{user[1]}}</td>
<td>{{user[2]}}</td>
<td>{{user[3]}}</td>
<td>{{user[5]}}</td>
</tr>
{% endfor %}
</table>
第二關——讓返回值更優雅
users = []
# 指定需要返回的列,存入列表
fields = ['id', 'username', 'name', 'email', 'mobile']
# join將列表轉為字串,傳入sql
sql = "SELECT %s FROM user" % ','.join(fields)
cur.execute(sql)
# 迴圈返回的元組
for row in cur.fetchall():
user = {}
# 利用enumerate遍歷列表,i為索引號,k為元素
# fields中列作為user字典的k,索引作為mysql返回列表的k,給字典賦值
for i, k in enumerate(fields):
user[k] = row[i]
users.append(user)
# 返回結果時列表巢狀字典,前端渲染就更優雅了
# eg:[{'name':'wd','age':18},{'name':'pc','age':19},……]
return json.dumps({'code': 0, 'users': users})
第三關——讓程式碼更簡潔
fields = ['id','username','name','email','mobile']
result= cur.fetchall()
users= [dict((k, row[i]) for i,k in enumerate(fields)) for row in result]
return json.dumps({'code':0,'users':users})
一個更高效的方式——直接將返回的巢狀元祖轉換為巢狀的字典,常用與只查詢 ID, Username 的場景
result = cur.fetchall()
# 最終結果 {1: 'ab', 2: 'bc'}
result = dict([(x['0'], x['1']) for x in result])
經驗總結
作為一個程式設計師學習新的技術知識都是必須的,我們都是自己事業上無人可替的開拓者,我們都是要經歷從入門到熟練再到精略的過程,過程雖然很痛苦不過收穫的喜悅也是別人羨慕不來的,IT 大牛 不是那麼容易就練成的。希望今天的分享能夠幫助到大家。致每一位程式設計師
相關文章
- Flask資料庫連線池Flask資料庫
- Flask學習之旅--資料庫Flask資料庫
- rac 升級crs 升級資料庫軟體,升級資料庫資料庫
- 打怪(githug)升級過程Git
- 資料庫升級資料庫
- ♀♀資料庫升級♀♀資料庫
- 【五年】Java打怪升級之路Java
- Flask框架使用藍圖劃分目錄、g物件、使用資料庫連線池連結資料庫Flask框架物件資料庫
- Oracle 資料庫升級Oracle資料庫
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 資料庫升級之-Dataguard滾動升級資料庫
- 連線資料庫資料庫
- 資料庫連線資料庫
- 資料庫升級之-資料泵資料庫
- 資料庫升級和工具資料庫
- 資料庫升級之-XTTS資料庫TTS
- 資料庫升級報錯資料庫
- JDBC連線資料庫JDBC資料庫
- java連線資料庫Java資料庫
- Mybatis連線資料庫MyBatis資料庫
- Mongodb資料庫連線MongoDB資料庫
- mysqli連線資料庫MySql資料庫
- 資料庫的連線資料庫
- 連線mysql資料庫MySql資料庫
- 資料庫連線池資料庫
- 資料庫連線==odbc資料庫
- 資料庫連線字串資料庫字串
- jmeter連線資料庫JMeter資料庫
- 連線資料庫-mysql資料庫MySql
- oracle資料庫升級11.2.0.3升級到11.2.0.4Oracle資料庫
- 靜默方式安裝、升級oracle(三): 升級資料庫軟體及資料庫Oracle資料庫
- android資料庫如何進行版本升級?架構之資料庫框架升級Android資料庫架構框架
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- (轉)PHP連線資料庫之PHP連線MYSQL資料庫程式碼PHP資料庫MySql
- Oracle資料庫升級(轉發)Oracle資料庫
- Oracle 資料庫 升級為 RACOracle資料庫
- 資料來源連線資料庫資料庫