账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    flask_sqlalchemy使用设置UTF8无效
    22
    0

    运行环境
    click==6.7
    Flask==0.12.2
    Flask-MySQLdb==0.2.0
    Flask-SQLAlchemy==2.3.2
    itsdangerous==0.24
    Jinja2==2.10
    MarkupSafe==1.0
    mysqlclient==1.3.12
    PyMySQL==0.8.0
    SQLAlchemy==1.2.4
    Werkzeug==0.14.1

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import pymysql
    
    from datetime import datetime
    
    # http://www.pythondoc.com/flask-sqlalchemy/config.html
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:root@localhost:3306/movies?charset=utf8"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
    app.config["SQLALCHEMY_NATIVE_UNICODE"] = True
    db = SQLAlchemy(app)
    
    
    # 用户
    class User(db.Model):
        __tablename__ = "user"
        # id
        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(11), unique=True)
        # 简介
        info = db.Column(db.Text)
        # 头像
        face = db.Column(db.String(255), unique=True)
        # 注册时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
        # 唯一标识符
        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 __str__(self):
            return "<User %r>" % self.name
    
    
    # 用户日志
    class Userlog(db.Model):
        __tablename__ = "userlog"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 所属用户
        user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
        # ip
        ip = db.Column(db.String(100))
        # 登陆时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    
        def __str__(self):
            return "<Userlog %r>" % self.id
    
    
    # 标签
    class Tag(db.Model):
        __tablename__ = "tag"
        # id
        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.utcnow)
        # 外键
        movies = db.relationship("Movie", backref='tag')
    
        def __str__(self):
            return "<Tag %r>" % self.name
    
    
    # 电影
    class Movie(db.Model):
        __tablename__ = "movie"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 标题
        title = db.Column(db.String(255), unique=True)
        # 播放地址
        url = db.Column(db.String(255), unique=True)
        # 简介
        info = db.Column(db.Text)
        # 图标
        logo = db.Column(db.String(255), unique=True)
        # 级别
        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"))
        # 上映地区
        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.utcnow)
        comments = db.relationship("Comment", backref='movie')  # 评论关联
        moviecols = db.relationship("Moviecol", backref='movie')  # 收藏关联
    
        def __str__(self):
            return "<Movie %r>" % self.title
    
    
    # 预告
    class Preview(db.Model):
        __tablename__ = "preview"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 标题
        title = db.Column(db.String(255), unique=True)
        # 图标
        logo = db.Column(db.String(255), unique=True)
        # 添加时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    
        def __str__(self):
            return "<Preview %r>" % self.title
    
    
    # 评论
    class Comment(db.Model):
        __tablename__ = "comment"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 评论
        content = db.Column(db.Text)
        # 所属电影
        movie_id = db.Column(db.Integer, db.ForeignKey("movie.id"))
        # 所属用户
        user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
        # 添加时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    
        def __str__(self):
            return "<Comment %r>" % self.id
    
    
    # 收藏电影
    class Moviecol(db.Model):
        __tablename__ = "moviecol"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 所属电影
        movie_id = db.Column(db.Integer, db.ForeignKey("movie.id"))
        # 所属用户
        user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
        # 添加时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    
        def __str__(self):
            return "<Moviecol %r>" % self.id
    
    
    # 权限
    class Auth(db.Model):
        __tablename__ = "auth"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 名称
        name = db.Column(db.String(255), unique=True)
        # 地址
        url = db.Column(db.String(255), unique=True)
        # 添加时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    
        def __str__(self):
            return "<Auth %r>" % self.name
    
    
    # 角色
    class Role(db.Model):
        __tablename__ = "role"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 名称
        name = db.Column(db.String(255), unique=True)
        # 权限列表
        auths = db.Column(db.String(255))
        # 添加时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    
        def __str__(self):
            return "<Role %r>" % self.name
    
    
    # 管理员
    class Admin(db.Model):
        __tablename__ = "admin"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 管理员账号
        name = db.Column(db.String(100), unique=True)
        # 管理员密码
        pwd = db.Column(db.String(100))
        # 是否超级管理员 0是
        is_super= db.Column(db.SmallInteger)
        # 所属角色
        role_id = db.Column(db.Integer, db.ForeignKey("role.id"))
        # 添加时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
        # 外键
        adminlogs = db.relationship("Adminlog",backref="admin")
        oplogs = db.relationship("Oplog",backref="admin")
    
        def __str__(self):
            return "<Admin %r>" % self.name
    
    
    # 登陆日志
    class Adminlog(db.Model):
        __tablename__ = "adminlog"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 所属用户
        admin_id = db.Column(db.Integer, db.ForeignKey("admin.id"))
        # ip
        ip = db.Column(db.String(100))
        # 登陆时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    
        def __str__(self):
            return "<Adminlog %r>" % self.id
    
    # 操作日志
    class Oplog(db.Model):
        __tablename__ = "oplog"
        # id
        id = db.Column(db.Integer, primary_key=True)
        # 所属用户
        admin_id = db.Column(db.Integer, db.ForeignKey("admin.id"))
        # ip
        ip = db.Column(db.String(100))
        # 操作原因
        reson = db.Column(db.String(255))
        # 登陆时间
        addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    
        def __str__(self):
            return "<Oplog %r>" % self.id
    
    if __name__ == '__main__':
        db.create_all()
        # role = Role(
        #     name=u"超级管理员",
        #     auths=""
        # )
        # db.session.add(role)
        # db.session.configure()

    报错内容

     Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 480")
      cursor.execute(statement, parameters)
    
    SAWarning: At least one scoped session is already present.  configure() can not affect sessions that have already been created.
      warn('At least one scoped session is already present. '
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 悠然南山行 普通会员 1楼

      在使用Flask-SQLAlchemy时,如果你的数据库是UTF-8编码的,但你的模型和视图中使用的是其他字符集(例如,非UTF-8),那么可能会遇到问题。

      在Flask-SQLAlchemy中,你可以使用encoding参数来设置数据库的编码。例如,如果你的数据库是UTF-8,你可以这样做:

      ```python from flask_sqlalchemy import SQLAlchemy

      app = Flask(name) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///utf-8/example.db', 'SQLALCHEMY_DATABASE

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部