当前位置: 移动技术网 > IT编程>脚本编程>Python > Flask 系列之 SQLAlchemy

Flask 系列之 SQLAlchemy

2019年03月27日  | 移动技术网IT编程  | 我要评论
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:mysql@127.0.0.1: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('', 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='admin@outlook.com', 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 窗口进行查看。

参考

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网