SQLAlchemy 是一種 ORM 框架,通過使用它,可以大大簡化我們對資料庫的操作,不用再寫各種複雜的 了。 說明 操作系統:Windows 10 Python 版本:3.7x 虛擬環境管理器:virtualenv 代碼編輯器:VS Code 實驗目標 實現網站與 mysql 資料庫的連接和 C ...
SQLAlchemy 是一種 ORM 框架,通過使用它,可以大大簡化我們對資料庫的操作,不用再寫各種複雜的
sql語句
了。
說明
- 操作系統:Windows 10
- Python 版本:3.7x
- 虛擬環境管理器:virtualenv
- 代碼編輯器:VS Code
實驗目標
實現網站與 mysql 資料庫的連接和 CRUD 操作。
MYSQL 的安裝與配置
打開 Ubuntu 16.04 的 bash 界面,執行下述操作
# 安裝
sudo apt update && sudo apt install mysql-server mysql-client
sudo service mysql status
# 配置安全性
sudo mysql_secure_installation
sudo mysqladmin -p -u root version
# 查看狀態
sudo service mysql status
sudo service mysql start
sudo service mysql stop
# 設置字元編碼
sudo vim /etc/mysql/conf.d/mysql.cnf
# 修改如下:
[mysql]
no-auto-rehash
default-character-set=utf8
[mysqld]
socket = /var/run/mysqld.sock
port =3306
character-set-server=utf8 # 必須設置,否則會導致無法插入中文數據
# 重啟服務
sudo service mysql restart
mysql 常用用法
# 進入 mysql
mysql -u root -p
# 查看當前字元編碼
show variables like 'character%';
# 創建資料庫 db_name
create database db_name charset=utf8;
# 顯示以存在的所有資料庫
show databases;
# 指定資料庫 db_name
use db_name;
# 創建資料庫表
create table table_name;
# 查看表信息
desc tablename;
# 刪除 資料庫 db_name
drop database db_name;
# 退出
exit;
使用 SQLAlchemy
首先進入 mysql 的控制台界面,創建我們需要使用的資料庫
sudo mysql -u root -p
create database todo;
use todo;
安裝 flask-sqlalchemy
pip install pymysql
pip install flask-sqlalchemy
在 todolist
目錄下創建 config.py 文件,示例代碼如下所示:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
SQLALCHEMY_DATABASE_URI = os.environ.get(
'SQLALCHEMY_DATABASE_URI') or 'mysql+pymysql://root:[email protected]:3306/todo'
SQLALCHEMY_TRACK_MODIFICATIONS = False
修改 todolist\app\__init__.py
,示例代碼如下所示:
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
@app.route('/')
@app.route('/index')
def index():
title = 'Home'
greet = 'Hello World'
return render_template('index.html', title=title, greet=greet)
在 todolist
目錄下創建 models.py 文件,示例代碼如下所示:
from app import db
from datetime import datetime
class User(db.Model):
__tablename__ = 'users'
# __table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20), nullable=False, unique=True)
email = db.Column(db.String(120), nullable=False, unique=True)
pwd = db.Column(db.String(120), nullable=False)
things = db.relationship('Thing', backref='User', lazy='dynamic')
def __repr__(self):
return "<User %r>" % self.name
class Thing(db.Model):
__tablename__ = 'things'
# __table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
title = db.Column(db.String(20), nullable=False)
text = db.Column(db.Text, nullable=False)
add_date = db.Column(db.DateTime, default=datetime.now)
def __repr__(self):
return "<Todo %r>" % self.id
修改 todolist\manage.py
,示例代碼如下所示:
from app import app, db
from models import User, Thing
from werkzeug.security import generate_password_hash
if __name__ == "__main__":
db.drop_all()
db.create_all()
pwd = generate_password_hash('123456789')
u1 = User(name='admin', email='[email protected]', pwd=pwd)
db.session.add(u1)
db.session.commit()
t1 = Thing(user_id=1, title='hello world', text='welcome to my hippiedom.')
db.session.add(t1)
db.session.commit()
u2 = User.query.get(1)
print(u2)
app.run(debug=True, host='0.0.0.0', port=5000)
此時,執行 python manage.py
,若程式無資料庫相關的錯誤信息,則表明資料庫中相應表已經創建成功,我們可以在 mysql 的 shell 視窗進行查看。