資料庫-SHELL
資料庫按照一定規則儲存程式資料,程式再發起查詢去取回所需的資料。分為文件資料庫(NoSQL)和鍵值資料庫(SQL),具體可去百度百科看介紹,這類不再贅述。Web程式最常用是基於關係模型的資料庫
資料庫框架
大多數資料庫引擎都有對應的python包,除此之外還可以選擇資料庫抽象層和SQLAlchemy和MongoEngine。
這裡採用Flask-SQLAlchemy管理資料庫。接下來用的資料是MySQL,安裝方法見[隨筆]
(http://www.jianshu.com/p/9b48ae42e92a)
然而我用的flask搭建python3.5平臺,實際操作過程中出現提示未匯入mysqldb(mysql-python)庫,目前只支援python2.7。所以網站改用python自帶輕量級SQLite。
hello.py:配置資料庫
from flask.ext.sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
app.config[`SQLALCHEMY_DATABASE_URI`] = `sqlite:///`+os.path.join(basedir,`data.sqlite`)
#資料庫位置
app.config[`SQLALCHEMY_COMMIT_ON_TEARDOWN`] =True
#每次請求結束後自動提交資料庫中的變動
db = SQLAlchemy(app)
flask quickstart定義資料位置輸入的是
app.config[`SQLALCHEMY_DATABASE_URI`] = `sqlite:////tmp/test.db`
差異在這裡用basedir獲取該檔案所在路徑,所以資料庫與hello.py同級
hello.py:定義Role和User模型
class NameFome(Form):
name = StringField(`who are you`, validators=[Required()])
submit = SubmitField(`Submit`)
class Role(db.Model):
__tablename__ = `roles` #定義資料庫中使用的表名
#模型的屬性,定義為db.Column的例項
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(64), unique=True)
#可選,定義__repr__方法,返回一個具有可讀性的字串表示模型
def __repr__(self):
return `<Role %r>` %self.name
class User(db.Model):
__table__name = `users`
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(64),unique=True, index=True)
def __repr__(self):
return `<User %r>` %self.username
hello.py:關係
class Role(db.Model):
#...
uers = db.relationship(`User`,backref=`role`)
class User(db.Model):
#...
role_id = db.Column(db.Integer,db.ForeignKey(`roles.id`))
所謂關係就是Role和User之間建立了連結。關係用users表中的外來鍵(ForeignKey)連線了兩行。
新增到users表中role_id被定義為外來鍵,傳給db.ForeignKey()的參數列明這列的值是roles表中的id值
新增到Role模型中的users屬性代表這個關係的物件導向視角。db.relationship()第一個參數列明這個關係的另一端是哪個模型。backref引數向User模型中新增一個role屬性,這一屬性可替代role_id訪問Role模型,此時獲取的是模型物件而不是外來鍵的值
上面這段話太複雜了,不懂多看幾遍,下面介紹一下常用的資料庫操作。
預先操作:
python hello.py shell
- 建立表
首先,讓flask-sqlalchemy根據模型類參加資料庫.
from hello import db
db.create_all() - insert
from hello import Role, User
admin_role = Role(name=`admin`)
mod_role = Role(name=`moderator`)
user_role = Role(name=`user`)
user_john = User(username=`John`,role=admin_role)
user_susan = User(username=`Susan`,role=mod_role)
user_david = User(username=`David`,role=user_role)
模型的建構函式(Role())接受的引數(name,username)是使用關鍵字引數指定的模型屬性初始值
通過會話(session)管理資料庫所做的改動。在flask_sqlalchemy中,會話由db.session表示
新增
多個新增
db.session.add_all([admin_role, mod_role,user_role,user_john,user_susan, user_david])
單個新增
db.session.add(xxx)
提交
db.session.commit()
回滾
db.session.rollback()
始終保證在會話中提交改動,這樣可以避免因部分更新導致資料的不一致性。
3.修改行
admin_role.name = `Administrator`
db.session.add(admin_role)
db.session.commit()
4.刪除行
db.session.delete(mod_role)
db.session.commit()
5.查詢行
Role.query.all()
User.query.filter_by(role=user_role).all()
一旦退出shell會話,這些例子中建立的物件不會以python物件的形式存在,而是作為各自資料庫中的行。重新開啟shell會話,需要從資料庫中讀取行,再重新建立python物件。
如果每次啟動shell會話都要匯入資料庫例項和模型,那麼真的要難過死了。這個可以通過為shell增加一個上下文解決
from flask.ext.script import Manager, Shell
def make_shell_context():
return dict(app=app,db=db,User=User,Role=Role)
manager.add_command("shell",Shell(make_context=make_shell_context))
相關文章
- shell 操作mysql資料庫MySql資料庫
- 自動更新資料庫資料的shell資料庫
- shell監控mysql 8.0資料庫MySql資料庫
- shell監控mysql 5.7資料庫MySql資料庫
- shell命令列中操作HBase資料庫命令列資料庫
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 資料庫單表備份還原shell資料庫
- 巧用shell生成資料庫檢查指令碼資料庫指令碼
- 實驗-shell執行資料庫命令.TXT資料庫
- 建立管理MySQL資料庫的shell指令碼MySql資料庫指令碼
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- 巧用shell指令碼分析資料庫使用者指令碼資料庫
- oracle資料庫執行狀態監控SHELLOracle資料庫
- 簡單資料庫及表建立shell指令碼資料庫指令碼
- 監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- 11. shell多執行緒備份資料庫執行緒資料庫
- 資料庫環境中的shell指令碼應用資料庫指令碼
- [轉]監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- 監控Oracle資料庫的常用shell指令碼(轉)Oracle資料庫指令碼
- Shell多執行緒備份資料庫的指令碼執行緒資料庫指令碼
- 使用shell指令碼檢視資料庫負載情況指令碼資料庫負載
- 通過shell指令碼得到資料庫的基本資訊(一)指令碼資料庫
- 【轉載】監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- linux shell如何呼叫sqlplus關閉資料庫LinuxSQL資料庫
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- 透過shell得到資料庫中許可權的指令碼資料庫指令碼
- 通過shell得到資料庫中許可權的指令碼資料庫指令碼
- shell查詢prometheus資料Prometheus
- shell生成測試資料
- 海量列式非關聯式資料庫HBase 架構,shell與API資料庫架構API
- 使用shell指令碼檢測資料庫連線訪問情況指令碼資料庫
- 從資料庫返回多條紀錄賦值給shell變數資料庫賦值變數
- shell-----資料呈現方式
- bash shell 程式與磁碟資料
- 透過shell抓取html資料HTML
- shell插入遠端mysql資料MySql
- 通過shell抓取html資料HTML