python flask使用经验

Python flask使用经验教训总结
Python

前言

这段时间开始接触flask,中间遇到些问题,也走过写弯路,本片博客用来说明下自己这段时间内踩的坑。

正文

问题一:在使用SQLAlchemy管理MySQL数据库时,创建db实例时报错,提示Import MySQLdb出错

要说明的是,在使用SQLAlchemy时,要先安装好MySQL数据库和MySQLdb,因为SQLAlchemy会调用MySQLdb模块。Windows下安装MySQLdb模块可以看一看这篇博客,如果是linux下安装则可以参考我的这篇博客。

问题二:同样在使用SQLAlchemy时,执行db.create_all()创建数据表时提示OperationalError: (_mysql_exceptions.OperationalError) (1045, “Access denied for user ‘ODBC’@’localhost’ (using password: NO)”)
分析,权限不够,没有在数据库中给所操作的数据库授权。
可以采用类似下面的方式,例如数据库名为test,则授权语句为

1

grant select ,insert,update,delete,lock tables on test.* to username@localhost identified by 'password';

上面的username处填写自己的用户名,password处填写自己连接时的密码。

问题三:使用*SQLAlchemy时,执行db.create_all()时出错,提示:OperationalError: (_mysql_exceptions.OperationalError) (1049, “Unknown database ‘flasky’”)

分析:错误提示未知数据库”flasky”*,因为在MySQL数据库中这个名为flasky的数据库根本不存在。注意,进行创建表操作前,必须保证首先所需的数据库已经在MySQL中创建好。这个数据库的名字在创建flask应用时设置

1

app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:root@localhost/flasky'

上面最后的flasky就是所用的数据库的名字,这个要在MySQL数据库中建好。
所以,合理的顺序是:首先在MySQL中创建好flasky数据库,然后授权,再之后在flask应用中定义类型,并创建数据表
上述过程类似如下操作:

首先在数据库中定义数据库并授权

create database flasky;
grant select,insert,update,delete,lock tables on flasky.* to username@localhost identified by 'password';

接下来在flask代码中定义ORM,创建SQLAlchemy实例并在必要的时候使用

from flask.ext.sqlalchemy import SQLAlchemy

app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='mysql://username:password@localhost/flasky' #使用MySQLdb数据库
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True #设置为自动提交

#下面定义两个数据表

```cpp
class Role(db.Model):
    __tablename__='roles'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(64),unique=True)
    users=db.relationship("User",backref="role")

def repr(self):
return ‘<Role %r>’%self.name

class User(db.Model):
tablename=“users”
id=db.Column(db.Integer,primary_key=True)
username=db.Column(db.String(64),unique=True,index=True)
role_id=db.Column(db.Integer,db.ForeignKey(‘roles.id’))

def __repr__(self):
    return '<User %r>'%self.username

然后可以在python shell下执行db.create_all()方法在数据库中创建两个数据表。

问题四:在使用模板引擎时正文采用中文会出现utf8 decode error的错误出现

原因是模板文件的编码不对,最好采用utf8无BOM的格式。在notepad++ 中默认编码是ANSI,需要改过来。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值