python创建mysql数据库_Python的flask:models.py来创建mysql数据库

Python 3.6

用到的包flask下有一个叫flask_sqlalchemy的数据库框架,没有安装的可以使用下面的来安装$ pip install -i https://pypi.douban.com/simple/ flask-sqlalchemyflask就不多说了$ pip install -i https://pypi.douban.com/simple/ flaskpymysql$ pip install -i https://pypi.douban.com/simple/ pymysql

-i后面跟的是豆瓣源,目的是访问国内的源加快安装速度

基础你所有模型的基类叫做 db.Model 。它存储在你必须创建的 SQLAlchemy 实例上。

Column类型

类型名Python 类型说明Integerint整数

String(size)str有最大长度的字符串

Textstr长 unicode 文本

Floatfloat存储浮点值

Booleanbool存储布尔值

Datedatetime.date日期

Timedatetime.time时间

DateTimedatetime.datetime日期和时间

PickleType任何python对象存储一个持久化 Python 对象

LargeBinarystr存储任意大的二进制数据

常用字段

选项名说明示例primary_key设置主键primary_key=True

unique是否唯一unique=True

index是否创建索引index=True

nullable是否允许为空nullable=True

default设置默认值default=datetime.datetime.now

连接URI格式dialect+driver://username:password@host:port/databaseMysql mysql://scott:tiger@localhost/mydatabase

Postgres postgresql://scott:tiger@localhost/mydatabase

SQLite sqlite:absolute/path/to/foo.db

创建数据库逻辑一个博客的很简单数据库的ER图

创建models.py文件,代码逻辑如下# -*- coding: utf-8 -*-

# @Time : 2018/2/4 14:46

# @Author : 禹都一只猫

# @Email : i@olei.me

# @File : models.py

# @Software: PyCharm

from flask import Flask

import pymysql

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@localhost:3306/artcms_pro"

app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True

db = SQLAlchemy(app)

"""

用户表:

0.编号

1.账号

2.密码

3.注册的时间

"""

class User(db.Model):

__tablename__ = "user"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(20), nullable=False)

pwd = db.Column(db.String(100), nullable=False)

addtime = db.Column(db.DateTime, nullable=False)

def __repr__(self):

return "" % self.name

"""

文章表

1.编号

2.标题

3.分类

4.作者

5.封面

6.内容

7.发布时间

"""

class Art(db.Model):

__tablename__ = "art"

id = db.Column(db.Integer, primary_key=True)

title = db.Column(db.String(100), nullable=False)

cate = db.Column(db.Integer, nullable=False)

user_id = db.Column(db.Integer, nullable=False)

logo = db.Column(db.String(100), nullable=False)

content = db.Column(db.Text, nullable=False)

addtime = db.Column(db.DateTime, nullable=False)

def __repr__(self):

return "" % self.title

if __name__ == "__main__":

db.create_all()一个表一个类,继承SQLAlchemy的Model类

app.config的两个,一个是连接数据库的,跟平常的SQLAlchemy表示的一样,一个是是否可以跟踪修改,一般是True

__tablename__='xxx'来作为表的名称

db.Column来创建表头,db中有很多类型,比如String、Integer、Text、Datetime等

primary_key来设置主键

nullable表示是否可以为空

要有一个repr函数,来返回呈现一个值

db.create_all()表示创建所有的表运行创建$ python models.py没有报错就创建好了

进阶有很多的表,各个一些表之间有外键相关联的情况如图,相对很复杂的ER图如图大部分的外键都是,一个表的id对于另外一个表的相对应的id代码如下# -*- coding: utf-8 -*-

# @Time : 2018/5/16 14:59

# @Author : 禹都一只猫

# @Email : i@olei.me

# @File : models.py

# @Software: PyCharm

# 存放数据模型

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

from _datetime import datetime

import pymysql

app = Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@127.0.0.1:3306/movie"

app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True

db = SQLAlchemy(app)

# 会员数据模型

class User(db.Model):

__tablename__ = "user"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 昵称

pwd = db.Column(db.String(100)) # 密码

email = db.Column(db.String(100), unique=True) # 邮箱

phone = db.Column(db.String(100), unique=True) # 手机号

info = db.Column(db.Text) # 个性简介

face = db.Column(db.String(255), unique=True) # 头像

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 注册时间

uuid = db.Column(db.String(255), unique=True) # 唯一标志符

userlogs = db.relationship('Userlog', backref='user') # 会员日志外键关系关联

comments = db.relationship('Comment', backref='user') # 评论外键关系关联

moviecols = db.relationship('Moviecol', backref='user') # 电影收藏外键关系关联

def __repr__(self):

return "" % self.name

# 会员登录日志

class Userlog(db.Model):

__tablename__ = "userlog"

id = db.Column(db.Integer, primary_key=True) # 编号

user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属会员

ip = db.Column(db.String(100)) # 登录IP

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间

def __repr__(self):

return "" % self.id

# 标签

class Tag(db.Model):

__tablename__ = "tag"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 标题

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

movies = db.relationship('Movie', backref='tag') # 电影外键关系关联

def __repr__(self):

return "" % self.name

# 电影

class Movie(db.Model):

__tablename__ = "movie"

id = db.Column(db.Integer, primary_key=True) # 编号

title = db.Column(db.String(255), unique=True) # 电影标题

url = db.Column(db.String(255), unique=True) # 电影播放的url

info = db.Column(db.Text) # 电影简介

logo = db.Column(db.String(255), unique=True) # 电影的logo

star = db.Column(db.SmallInteger) # 电影的星级

playnum = db.Column(db.BigInteger) # 电影播放量

commentnum = db.Column(db.BigInteger) # 电影的评论量

tag_id = db.Column(db.Integer, db.ForeignKey('tag.id')) # 电影所属标签id

area = db.Column(db.String(255)) # 上映地区

release_time = db.Column(db.Date) # 上映时间

length = db.Column(db.String(100)) # 播放时间

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

comments = db.relationship('Comment', backref='movie') # 评论外键关系关联

moviecols = db.relationship('Moviecol', backref='movie') # 电影收藏外键关系关联

def __repr__(self):

return "" % self.title

# 上映预告

class Preview(db.Model):

__tablename__ = "preview"

id = db.Column(db.Integer, primary_key=True) # 编号

title = db.Column(db.String(255), unique=True) # 电影标题

logo = db.Column(db.String(255), unique=True) # 电影的logo

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.title

# 评论

class Comment(db.Model):

__tablename__ = "comment"

id = db.Column(db.Integer, primary_key=True) # 编号

content = db.Column(db.Text) # 评论内容

movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 电影所属ID

user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 用户所属id

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.id

# 电影收藏

class Moviecol(db.Model):

__tablename__ = "moviecol"

id = db.Column(db.Integer, primary_key=True) # 编号

movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 电影所属ID

user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 用户所属id

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.id

# 权限

class Auth(db.Model):

__tablename__ = "auth"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 权限名称

url = db.Column(db.String(255), unique=True) # 权限的地址

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.name

# 角色

class Role(db.Model):

__tablename__ = "role"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 角色名称

auths = db.Column(db.String(600)) # 权限列表

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

admins = db.relationship('Admin', backref='role') # 角色外键关系关联

def __repr__(self):

return "" % self.name

# 管理员

class Admin(db.Model):

__tablename__ = "admin"

id = db.Column(db.Integer, primary_key=True) # 编号

name = db.Column(db.String(100), unique=True) # 管理员名称

pwd = db.Column(db.String(100), unique=True) # 密码

is_super = db.Column(db.SmallInteger) # 是否是超级管理员,0为超级管理员

role_id = db.Column(db.Integer, db.ForeignKey('role.id')) # 角色ID

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

adminlogs = db.relationship('Adminlog', backref='admin') # 管理员登录日志外键关系关联

oplogs = db.relationship('Oplog', backref='admin') # 管理员操作日志外键关系关联

def __repr__(self):

return "" % self.name

# 管理员登录日志

class Adminlog(db.Model):

__tablename__ = "adminlog"

id = db.Column(db.Integer, primary_key=True) # 编号

admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 管理员所属ID

ip = db.Column(db.String(100)) # 登录IP

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.id

# 操作日志

class Oplog(db.Model):

__tablename__ = "oplog"

id = db.Column(db.Integer, primary_key=True) # 编号

admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 管理员所属ID

ip = db.Column(db.String(100)) # 操作ip

reason = db.Column(db.String(600)) # 操作原因

addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间

def __repr__(self):

return "" % self.id

if __name__ == "__main__":

db.create_all()通过db.relationship()来建立与其他表的联系,上面代码可以看出,比如user表与userlog表(第一个与第二个类),user表中的userlogs表头是要userlog这个表建立联系,那么第一个参数就是对应的类的名称,backref后面跟的是本表的名字

接下来就是userlog表的类Userlog中的user_id的外键是user表中的id,外键通过db.Foreignkey()来建立外键,参数就是对应的表.表头,比如上面参数的user.id运行创建$ python models.py没有报错,就会生成如下的库上面生成ER表、查看数据库结构的软件是DataGrip

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值