SQLAlchemy
管理兩個數(shù)據(jù)庫
如果一個Flask項目的數(shù)據(jù)需要放在兩個不同的數(shù)據(jù)庫
如何使用SQLAlchemy進行操作?
在定義數(shù)據(jù)庫路徑的時候綁定第二個數(shù)據(jù)庫
app.config['SQLALCHEMY_DATABASE_URI'] = 數(shù)據(jù)庫1路徑 app.config['SQLALCHEMY_BINDS'] = {'數(shù)據(jù)庫2名稱': 數(shù)據(jù)庫2路徑}在定義表的時候帶上bind_key
class Version(db.Model):__bind_key__ = '數(shù)據(jù)庫2名稱'__tablename__ = 'version'在初始化數(shù)據(jù)庫的時候帶上--multidb參數(shù)
python app.py db init --multidb python app.py db migrate python app.py db upgrade就能同時管理兩個數(shù)據(jù)庫了,沒有什么區(qū)別
分組并統(tǒng)計每組的數(shù)量
工作上有個需求,現(xiàn)在有一組這樣的數(shù)據(jù)
l = [{"id": 1,"type": 1,"user": "Jack",},{"id": 2,"type": 1,"user": "Rose",},{"id": 3,"type": 1,"user": "Rose",},{"id": 4,"type": 2,"user": "Rose",}, ]首先把屬于Rose的東西拿出來,有三個
然后把type相同的合并,只要數(shù)量
于是會變成下面這個樣子,用一個amount來表示數(shù)量
第一種方式取出來的數(shù)據(jù),用python去處理也可以,但寫得有點難看
所以我想這種事情數(shù)據(jù)庫應(yīng)該可以做,就去找了資料
返回的東西是這個樣子,第一個數(shù)是type,第二個數(shù)是amount
第一個元組表示type為1的數(shù)量有兩個,第二個元組表示type為2的數(shù)量有一個
拿到這個以后問題基本解決了,剩下用python代碼實現(xiàn)
現(xiàn)在解釋一下查找步驟的具體意義
- func帶了一些函數(shù)功能,有count、sum、avg等
這里用的是count求數(shù)量的功能,求出type為1的共有多少個 - group_by是分組的功能,以括號里的type為標準分組,起到了去重的作用
- filter是查找user為Rose的記錄
官方文檔:
http://www.pythondoc.com/flask-sqlalchemy/api.html#flask.ext.sqlalchemy.SQLAlchemy.Query
參考文檔:
這篇比較好,但頁面的線條效果簡直魔性
https://wing324.github.io/2017/02/25/%E4%BD%BF%E7%94%A8flask-sqlalchemy%E7%8E%A9%E8%BD%ACMySQL/
這個回答剛好解決了我的問題
https://stackoverflow.com/questions/1052148/group-by-count-function-in-sqlalchemy
https://github.com/lzjun567/note/blob/master/note/python/sqlalchemy.md
http://www.jianshu.com/p/8d085e2f2657
default 的問題
下面這樣的default其實沒有用,或者說沒起到我想要的作用
name = db.Column(db.String(10), default='')在表里新增一個字段后,數(shù)據(jù)里這個新增字段的值都為null,這個default在這里就沒用
而我想讓它新增之后不為null有一個默認值,可以這么做
新增的字段的默認值就為一個空字符串
注意
如果字段是整數(shù),不能直接寫server_default=0
這樣會報錯,應(yīng)該是server_default='0',出來的默認值就是0
并且默認值里不能有中文,server_default='你好'
這樣也會報錯,但我覺得數(shù)據(jù)庫應(yīng)該可以設(shè)置好了這個中文編碼問題
Flask-Migrate 資料
http://www.tuvary.com/2017/08/03/cjb58hpua0000f4fuilwri98b/
http://wing324.github.io/2017/02/26/Flask-Migrate%E7%9A%84%E4%BD%BF%E7%94%A8/
http://cold-sunset.com/blog/2
https://flask-migrate.readthedocs.io/en/latest/
如何支持 emoji 表情
數(shù)據(jù)庫如果要支持emoji,首先編碼得是utf8mb4,utf8不行
但我的MySQL已經(jīng)是了utf8mb4,存進去的還是四個問號
查了才發(fā)現(xiàn),SQLAlchemy需要指定編碼,鬼知道是什么編碼用到現(xiàn)在 : )
指定方式
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+{DRIVER}://{USER}:{PASSWORD}@{HOST}:{PORT}/{NAME}?charset=utf8mb4'.format(**db_config)?charset=utf8mb4是新加的,刷新就能用了
資料:
https://hukaixuan.github.io/2017/04/10/flask-+-sqlalchemy-%E5%AD%98%E5%82%A8emoji/
http://zhangming0509.github.io/2016/02/24/mysql-emoji/
轉(zhuǎn)載于:https://www.cnblogs.com/xb21/p/8386062.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的SQLAlchemy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (4.12)全面解析-SQL事务+隔离级
- 下一篇: 2016012026 管凌波 散列函数的