flask SQLALCHEMY配置初级

使用Config配置设置数据库

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)


class Config(object):
    """配置参数"""
    # sqlalchemy的配置参数
    # SQLALCHEMY_DATABASE_URI = "mysql://root:@127.0.0.1:3306/db_python04"	# 这里会报错
    # config配置中添加【python3官方使用的是mysqlconnector驱动,如果使用pymysql驱动就会有警告】
    SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:@localhost/db_python04"
    # 设置SQLAlchemy自动更新追踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    

app.config.from_object(Config)

# 创建数据库里的sqlalchemy的工具对象
db = SQLAlchemy(app)


class Role(db.Model):
    """用户角色/身份表"""
    __tablename__ = "tbl_roles"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
    # 外键 反向字段
    users = db.relationship("User", backref="role")


# 创建模型类
class User(db.Model):
    """用户表"""
    __tablename__ = "tbl_users"  # 指明数据的表名
    id = db.Column(db.Integer, primary_key=True)    # 整型的主键,会默认设置为自增主键
    name = db.Column(db.String(64), unique=True)    # 唯一键
    email = db.Column(db.String(128), unique=True)
    password = db.Column(db.String(128))
    role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id"))


@app.route('/')
def index():
    return "index page"


if __name__ == '__main__':
    # 清除数据库的所有数据
    db.drop_all()
    db.create_all()
    # app.run(debug=True)

错误异常信息记录

SQLALCHEMY_DATABASE_URI = "mysql://root:@127.0.0.1:3306/db_python04"	

这里会报错,警告提示:site-packages\pymysql\cursors.py:170: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 485")
  result = self._query(query)

解决方案:
	第一步:安装mysql的驱动【python3官方推荐mysql-connector】如果想将次警告去掉需要导入一个模块
		pip install mysql-connector
	
	然后在config配置中添加【python3官方使用的是mysqlconnector驱动,如果使用pymysql驱动就会有警告】
		-- 修改后就正常了
		SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:123@localhost/StudentManage"


relationship

users = db.relationship("User", backref="role")
	0.添加到Role模型中的users属性代表这个关系的面向对象视角。对于一个Role类的实例,其users属性将返回与角色相关联的用户组成的列表。
	1.db.Relationship()第一个参数表明这个关系的另一端是哪个模型(类)。如果模型类尚未定义,可使用字符串形式指定。
	2.db.Relationship()第二个参数backref,将向User类中添加一个role属性,从而定义反向关系。这一属性可替代role_id访问Role模型,此时获取的是模型对象,而不是外键的值。

上面的关系为一对多关系的表示,一对一怎么办?
	调用db.Relationship()时需要把userlist参数设置为False。如下:
		db.Relationship('User',backref='role',uselist=False)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值