• 整合 SQLite UDF (用户定义函数) 到 webpy 数据库层

    整合 SQLite UDF (用户定义函数) 到 webpy 数据库层

    问题:

    用户在邮件列表中询问,我把它放在这里作为将来使用和参考。

    解决:

    您可以添加到Python函数到SQLite,并让它们在您的查询调用。

    示例:

    1. >>> import sqlite3 as db
    2. >>> conn = db.connect(":memory:")
    3. >>> conn.create_function("sign", 1, lambda val: val and (val > 0 and 1 or -1))
    4. >>> cur = conn.cursor()
    5. >>> cur.execute("select 1, -1")
    6. <sqlite3.Cursor object at 0xb759f2c0>
    7. >>> print cur.fetchall()
    8. [(1, -1)]
    9. >>> cur.execute("select sign(1), sign(-1), sign(0), sign(-99), sign(99)")
    10. <sqlite3.Cursor object at 0xb759f2c0>
    11. >>> print cur.fetchall()
    12. [(1, -1, 0, -1, 1)]
    13. >>> conn.close()

    在webpy中,你可以通过游标如db._db_cursor().connection 取得连接对象的引用。

    示例:

    1. >>> import web
    2. >>> db = web.database(dbn="sqlite", db=":memory:")
    3. >>> db._db_cursor().connection.create_function("sign", 1, lambda val: val and (val > 0 and 1 or -1))
    4. >>> print db.query("select sign(1), sign(-1), sign(0), sign(-99), sign(99)").list()
    5. [<Storage {'sign(1)': 1, 'sign(-1)': -1, 'sign(99)': 1, 'sign(-99)': -1, 'sign(0)': 0}>]