使用Flasky-SQLAlchemy 管理資料庫
使用Flasky-SQLAlchemy 管理資料庫
本文主要解決那本《Flask Web開發 基於Python的Web應用開發實戰》
這本書坑不少,書是挺好的,但是你會踩不少坑,導致你會有很多bug,即使你複製的原始碼。
先來一段程式碼
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import os
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' +\
os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = True
#app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
@app.route('/')
def index():
return "Hello world"
if __name__ == '__main__':
app.run()
注意,我在app.config中有一行是打了註釋的。
如果加了註釋:效果如下:
![3308539-54d3d5d412e9cb7f.png](https://i.iter01.com/images/74726b2a5d8ac4a86171edafc04227dc823b9decb0a53dfe6dbb3f0c6d1af2e5.png)
它會顯示一個warning。一個警告
如果那一行去掉註釋,效果如下:
![3308539-f982d77acc1f83ee.png](https://i.iter01.com/images/72481614678ba7c05f98a9539b57fe5b3b0df269aa543c8f0b1b05f7d0d56756.png)
這樣子警告就消失了。
接下來,為資料庫建個表,簡單起見,表中就兩個欄位,一個id,一個username,
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64))
@app.route('/')
def index():
u = User(username='zhangsan')
return u.username
![3308539-550a78ad3bc385a5.png](https://i.iter01.com/images/368b80b99614d88d7b41edca4718f706a7fd61ff7a4096e7c518a52e9d143106.png)
看上去還可以。
再換個方式。真正把使用者資料(就是那個變數u)新增到資料庫去.
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import os
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' +\
os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64))
@app.route('/')
def index():
u = User(username='zhangsan')
db.session.add(u)
return User.query.filter_by(username='zhangsan').first().username
if __name__ == '__main__':
# db.drop_all()
# db.create_all()
app.run()
注意看在最下面,註釋的那兩行,如果註釋掉的話,你去執行,會出現一個500的錯誤
![3308539-78fb52f569e0dcfa.png](https://i.iter01.com/images/efee135c618e3fe7f84b79394cc904638fb34cbdaa062841ba321bc813eabf23.png)
這是你仔細觀察目錄中的檔案,多了一個名字叫:data.sqlite的檔案,然後你去檢視這個檔案的內容,
你會發現裡面什麼都沒有。
原因很簡單,因為資料庫的表你根本就還沒有建立呢,所在在最下面if裡面的兩行,是為了建立表用的。
估計大多數人被這個坑了。
當我們把註釋解除之後.
![3308539-550a78ad3bc385a5.png](https://i.iter01.com/images/368b80b99614d88d7b41edca4718f706a7fd61ff7a4096e7c518a52e9d143106.png)
![3308539-c9ee5a051688429e.png](https://i.iter01.com/images/5dbd2b771ccd6da7b995a7d1da926b7384f1a89f2a6efd2cb92a7fd9fe116304.png)
這個樣子就有東西了。
所以總的來說,當你去按照那個書學習的時候,如果開啟localhost:5000之後出現SQLAlchemy的Error的時候
,先去看看有沒有那個.sqlite檔案(一般都有),然後去看看裡面有沒有東西,如果沒有請按照如下方式:
這裡假設你的db變數所在檔案為:manage.py
python3 manage.py shell
>>>from manage import db
>>>db.drop_all()
>>>db.create_all()
相關文章
- 使用Flyway來管理資料庫版本資料庫
- 使用mongo-express管理mongodb資料庫ExpressMongoDB資料庫
- 使用Profile標準化資料庫管理資料庫
- 資料庫PostrageSQL-管理資料庫資料庫SQL
- MySQL資料庫資料管理MySql資料庫
- 資料庫的管理資料庫
- 資料庫⽇志管理資料庫
- 資料庫與資料庫管理系統概述資料庫
- SpringBoot資料庫管理 - 用Liquibase對資料庫管理和遷移?Spring Boot資料庫UI
- MySQL-授權使用者管理資料庫MySql資料庫
- 達夢資料庫使用者與模式管理資料庫模式
- PostgreSQL資料庫使用者許可權管理SQL資料庫
- 使用 Bytebase 管理 Rainbond 上的應用資料庫AI資料庫
- 萬里GreatDB資料庫的學習之路--GreatDB資料庫的管理和使用(2)資料庫
- phpMyAdmin管理資料庫和資料表PHP資料庫
- 資料庫管理:DBeaverEE for Mac資料庫Mac
- postgresql 資料庫基本管理SQL資料庫
- 資料庫雲容量管理資料庫
- 2.8 使用資料庫服務管理應用負載資料庫負載
- 資料庫管理工具DataGrip使用總結(一)資料庫
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- 資料庫管理丨10種不同的雲開發資料庫管理技巧資料庫
- 全平臺資料(資料庫)管理工具 DataCap 管理 Rainbond 上的所有資料庫資料庫AI
- 資料庫管理-第122期 配置Halo資料庫(202301204)資料庫
- 資料庫管理-第120期 初探Halo資料庫(202301201)資料庫
- 【PG管理】postgresql資料庫管理相關SQL資料庫
- 資料庫的資訊保安管理資料庫
- 雲資料庫管理與資料遷移資料庫
- 使用PyQt開發一個資料庫管理桌面軟體QT資料庫
- 使用「TablePlus」輕鬆安全地管理多個資料庫資料庫
- Oracle資料庫管理——表資料庫高水位及shrink操作Oracle資料庫
- 1.1.1. 資料庫管理員資料庫
- PolarDB資料庫LVM管理配置資料庫LVM
- SQL資料庫備份管理SQL資料庫
- 資料庫管理Valentina Studio Pro資料庫
- Navicat Premium 15 資料庫管理REM資料庫
- 管理SQL Server資料庫安全SQLServer資料庫
- VMware Data Services Manager 2.1 - 資料庫管理和資料服務管理資料庫
- 資料庫 Web 管理工具 treesoft 的安裝與使用資料庫Web