使用Config配置设置数据库
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
class Config(object):
"""配置参数"""
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:@localhost/db_python04"
SQLALCHEMY_TRACK_MODIFICATIONS = False
app.config.from_object(Config)
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()
错误异常信息记录
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)