解决 SQLAlchemy 中使用 sqlite 时 BigInteger 不支持 AUTOINCREMENT 的问题

默认情况下,在 SQLAlchemy 中使用 sqlite 作为数据库时, BigInteger 不支持自动增长(AUTOINCREMENT),插入数据时会报如下错误:

Query Error: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY Unable to execute statement

可以通过使用 compilessqlite 下的 BigInteger 做特殊处理,让它实际上执行的是 Integer 相关操作:

from sqlalchemy import BigInteger
from sqlalchemy.ext.compiler import compiles


@compiles(BigInteger, 'sqlite')
def bi_c ...
more ...

[flask]调整 Flask-RESTful 中 reqparse.RequestParser 对 None 值的处理

默认情况下,reqparse.RequestParserNone 的处理结果是: 就算你定义了 required=True,它仍旧会接受客户端提交的 None 不会返回 400 错误码。

这往往违背了我们的初衷:一般对于 required=True 的字段,我们希望在它的值为 None 的时候能够返回 400 错误码,提示该字段不能为 None, 因为 None 值可能会在保存数据的时候引起数据库抛出 NOT NULL 错误。

可以通过定义一个 argument_class 来改变 reqparse.RequestParser 的默认行为:

from flask.ext.restful import reqparse


class Argument(reqparse.Argument):
    """
    继承自 reqparse ...
more ...