背景描述: 
最近在使用 flask 开发一个小的 web 项目,开始的时候为了方便,使用 sqlite 数据库,现在功能基本开发完成,开始切换到 Mysql 数据库,发现几个 SQLAlchemy 的坑,分享出来供大家参考。  
1 、连接坑 
 相信这个是最早遇到的,连接语句要写成下面这样,记得添加“ pymysql ”这个字段 
 SQLALCHEMY_DATABASE_URI = "mysql+pymysql://username:
[email protected]:3306/database"   
2 、自动创建数据库的坑 
 使用 ORM 自动创建数据表时,出现: MySQL Error Number 1005 Can ’ t create table ( Errno : 150 )这个错误,经过 的搜索资料,问题得到解决,此问题不外乎这几种情况。 
 解决方法见我的博客:http://www.cnblogs.com/StitchSun/p/5386291.html   
3 、 Sqlite 和 Mysql 内置函数不同 
 sqlite 内置了日期格式处理函数 strftime ,而 Mysql 确没有这个函数,导致原来在 sqlite 上调试通过的查询要重新编写。 
 Mysql 内置的函数是 DATE_FORMAT 。 
 这两个函数都可以通过 db.func.xxx 调用。我想一套代码搞定,调试了半天终于找到了解决方法。 
 strftime 和 DATE_FORMAT 的使用方法基本一样,但是两个参数的位置是对换的,即 
 strftime ( format , datetime ); DATE_FORMAT ( datatime , format )  
 最终的解决办法是使用了两者通用的 db.func.date 。  
 我原来的代码是这样的: 
 功能是查询每天的版本数量。 
 D.query.with_entities( 
 db.func.strftime('%Y.%m.%d', D.timestamp).label('date'), 
 db.func.count(D.bug_id).label('total')).filter( 
 D.version == “参数”).group_by( 
 db.func.strftime('%Y.%m.%d', D.timestamp)).all()  
 修改后: 
 all = D.query.with_entities( 
 db.func.date(D.timestamp).label('date'), 
 db.func.count(D.id).label('total')).filter( 
 D.version == “参数”).group_by( 
 db.func.date(D.timestamp)).all()  
 这里的结果还要做一个转换,即要把查询的结果的 date 字段手动的转换为 str , 
 即:[str(s.date for s in all)]  
 这样可以做到兼容 Mysql 和 Sqlite 两者。   
 如果大家有更好的方法,请多多指点