在昨日已經教授大家flask-sqlalchemy的一些基本語法,以及如何將flask-sqlalchemy導入專案之中,而今天就開始進一步介紹給大家如何在截至目前的程式碼中加入flask-sqlalchemy。
本文同步放置於此
import sqlite3
class UserModel:
name = ''
email = ''
password = ''
id = 0
def __init__(self, name, email, password):
self.name = name
self.email = email
self.password = password
def add_user(self):
conn = sqlite3.connect('user.db')
cursor = conn.cursor()
insert_query = 'INSERT INTO users VALUES(?, ?, ?, ?)'
cursor.execute(insert_query, (None, self.name,
self.email, self.password))
conn.commit()
conn.close()
def update_user(self):
conn = sqlite3.connect('user.db')
cursor = conn.cursor()
update_query = 'UPDATE users SET name=?, email=?, password=? WHERE id=?'
cursor.execute(update_query, (self.name,
self.email, self.password, self.id))
conn.commit()
conn.close()
@staticmethod
def get_user(name):
user = None
conn = sqlite3.connect('user.db')
cursor = conn.cursor()
query_one_query = 'SELECT * FROM users WHERE name=?'
result = cursor.execute(query_one_query, (name,)).fetchone()
if result is None:
return None
user = UserModel(result[1], result[2], result[3])
user.id = result[0]
conn.close()
return user
@staticmethod
def delete_user(name):
conn = sqlite3.connect('user.db')
cursor = conn.cursor()
delete_query = 'DELETE FROM users WHERE name=?'
cursor.execute(delete_query, (name,))
conn.commit()
conn.close()
@staticmethod
def get_all_user():
users = []
conn = sqlite3.connect('user.db')
cursor = conn.cursor()
query_one_query = 'SELECT * FROM users'
for item in cursor.execute(query_one_query):
user = UserModel(item[1], item[2], item[3])
user.id = item[0]
users.append(user)
conn.close()
return users
所以我們要做的是把所有sqlite的語法都拿掉,並且改用common.db來實作。
接下來會一個步驟一個步驟教大家如何在現有的專案中導入flask-sqlalchemy。
首先先重新定義UserModel,內容如下
class UserModel(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(120))
def __init__(self, name, email, password):
self.name = name
self.email = email
self.password = password
在定義完UserModel後我們要開始實作CRUD了。
這部分將昨日的課程套用在今天的實作上,請參考以下內容:
def add_user(self):
db.session.add(self)
db.session.commit()
如同新增,刪除的作法也很簡單,請參考以下內容:
def delete_user(self):
db.session.delete(self)
db.session.commit()
比起新增、刪除來說修改的作法更簡單,請參考以下內容:
def delete_user(self):
db.session.commit()
查詢相較知識比較困難一點,不過也沒有很難,詳細內容請參考下列範例:
@classmethod
def get_user(cls, name):
return cls.query.filter_by(name=name).first()
最後說明一個昨天沒有講到的東西,因為我們的專案會列出所有使用者的資料,這部分就需要透過下列方法取得資料了:
@classmethod
def get_all_user(cls):
return cls.query.all()
在實作完成之後就是要設定資料庫的部分了,所以這裡修改app.py加入以下內容即可:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///user.db'
from common.db import db
class UserModel(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(120))
def __init__(self, name, email, password):
self.name = name
self.email = email
self.password = password
def add_user(self):
db.session.add(self)
db.session.commit()
def update_user(self):
db.session.commit()
@classmethod
def get_user(cls, name):
return cls.query.filter_by(name=name).first()
def delete_user(self):
db.session.delete(self)
db.session.commit()
@classmethod
def get_all_user(cls):
return cls.query.all()
今日的課程透過在現有的專案中實作flask-sqlalchemy,希望能夠讓讀者們更了解如何透過flask-sqlalchemy更便利的操作資料庫的內容。不過截至目前為止還沒說明如果資料庫還沒建立或是資料更新該如何處理,這部分明天會針對加以說明,敬請期待。