# 使用SQL指令操作資料庫 ###### tags: `程式學習與問題總集` ## 新增資料表 * 連線 ```python= from flask import Flask, request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) #app.config['SQLALCHEMY_DATABASE_URL'] = 'postgresql://管理者帳號:管理者密碼@資料庫位址:5432/資料庫名稱' app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://admin:123456@127.0.0.1:5432/testdb' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app) ``` * 使用SQL語法操作PostgreSQL資料庫的語法為 ```sql= 命令變數 = "SQL語法" db.engine.execute(命令變數) ``` * 新增資料表 ```sql= CREATE TABLE 資料表名稱( 欄位1 資料型態, 欄位2 資料型態, ) ``` * 範例 ```python= @app.route('/setup') def setup(): sql = """ CREATE TABLE student2( sid serial NOT NULL, name character varying(50) NOT NULL, tel character varying(50), addr character varying(200), email character varying(100), PRIMARY KEY(sid)) """ db.engine.execute(sql) return '資料表創建成功' ``` * 結果 ![](https://i.imgur.com/kJvCXi2.png) ## 新增資料 * 資料型態必須一模一樣,否則會發生錯誤...... ```sql= INSERT INTO 資料表名稱(欄位名稱1, 欄位名稱2, ......) VALUES(欄位值1, 欄位值2) ``` * 範例 ```python= @app.route('/insert') def insert(): sql = """ INSERT INTO student2(name, tel, addr, email) VALUES('rex', '0962015850', 'taiwan', 'rex@gamil.com'); INSERT INTO student2(name, tel, addr, email) VALUES('xia', '09645454540', 'taiwan', 'xia@gamil.com'); INSERT INTO student2(name, tel, addr, email) VALUES('toor', '09620458454', 'taiwan', 'toor@gamil.com'); """ db.engine.execute(sql) return '資料新增成功' ``` * 結果 ![](https://i.imgur.com/HCjq940.png) ## 查詢資料 ```sql= SELECT 欄位名稱1, 欄位名稱2 FROM 資料表名稱 [ WHERE 條件式 ORDER BY 欄位名稱 [ASC|DESC]] ``` * WHERE、ORDER BY參數可有可無,WHERE是條件,ORDER BY是排序,ASC是遞減排序,DESC是遞增排序 * 範例 ```python= @app.route('/query') def query(): #取得全部 sql = "SELECT * FROM student2 ORDER BY sid" students = db.engine.execute(sql) msg = '' for student in students: msg += f"{student['name']}, {student['tel']}, {student['addr']}, {student['email']}<br>" return msg ``` * 結果 ![](https://i.imgur.com/kwiKVzi.png) ## 更新資料 ```sql= UPDATE 資料表名稱 SET 欄位名稱1 = 值1,欄位名稱2 = 值2,.......[WHERE 條件式] ``` * WHERE的參數可有可無,但是要小心操作...... * 範例 ```python= @app.route('/updateuser/<int:uid>') def updateuser(uid): sql = "UPDATE student2 SET name = 'admin' WHERE sid = " + str(uid) db.engine.execute(sql) return '資料修改成功' ``` * 結果 ![](https://i.imgur.com/RdzrWxH.png) ## 刪除資料 ```sql= DELETE FROM 資料表名稱 [ WHERE 條件式 ] ``` * WHERE的參數可有可無,但是要小心操作...... * 範例 ```python= @app.route('/deleteuser/<int:uid>') def deleteuser(uid): sql = "DELETE FROM student2 WHERE sid = " + str(uid) db.engine.execute(sql) return '資料刪除成功' ``` * 結果 ![](https://i.imgur.com/tkcU8EE.png)