python sql语句生成_用python生成SQL语句

本文介绍了几个Python函数,用于生成基本的SQL查询,包括SELECT、UPDATE/INSERT(UPSERT)和DELETE语句。这些函数接受表名和包含字段名及对应值的字典作为参数,帮助简化数据库操作。然而,需要注意的是,直接使用这些函数可能会面临SQL注入的风险,使用时需确保对输入进行适当的安全处理。
摘要由CSDN通过智能技术生成

我知道这是一个老问题,但我经常想要OP想要的东西:一个用于生成基本SQL的非常简单的库。

下面的函数就是这样做的。给它们一个表名和一个包含要使用的数据的字典,它们返回所需操作的SQL查询。

键/值对表示数据库行中的字段名和值。def read(table, **kwargs):

""" Generates SQL for a SELECT statement matching the kwargs passed. """

sql = list()

sql.append("SELECT * FROM %s " % table)

if kwargs:

sql.append("WHERE " + " AND ".join("%s = '%s'" % (k, v) for k, v in kwargs.iteritems()))

sql.append(";")

return "".join(sql)

def upsert(table, **kwargs):

""" update/insert rows into objects table (update if the row already exists)

given the key-value pairs in kwargs """

keys = ["%s" % k for k in kwargs]

values = ["'%s'" % v for v in kwargs.values()]

sql = list()

sql.append("INSERT INTO %s (" % table)

sql.append(", ".join(keys))

sql.append(") VALUES (")

sql.append(", ".join(values))

sql.append(") ON DUPLICATE KEY UPDATE ")

sql.append(", ".join("%s = '%s'" % (k, v) for k, v in kwargs.iteritems()))

sql.append(";")

return "".join(sql)

def delete(table, **kwargs):

""" deletes rows from table where **kwargs match """

sql = list()

sql.append("DELETE FROM %s " % table)

sql.append("WHERE " + " AND ".join("%s = '%s'" % (k, v) for k, v in kwargs.iteritems()))

sql.append(";")

return "".join(sql)

你就这么用。只要给它一个表名和一个字典(或者使用python的**kwargs特性):>>> upsert("tbl", LogID=500, LoggedValue=5)

"INSERT INTO tbl (LogID, LoggedValue) VALUES ('500', '5') ON DUPLICATE KEY UPDATE LogID = '500', LoggedValue = '5';"

>>> read("tbl", **{"username": "morten"})

"SELECT * FROM tbl WHERE username = 'morten';"

>>> read("tbl", **{"user_type": 1, "user_group": "admin"})

"SELECT * FROM tbl WHERE user_type = '1' AND user_group = 'admin';"

但要小心SQL注入攻击

看看当代码的恶意用户执行此操作时会发生什么:>>> read("tbl", **{"user_group": "admin'; DROP TABLE tbl; --"})

"SELECT * FROM tbl WHERE user_group = 'admin'; DROP TABLE tbl; --';"

制作自己的临时ORM很容易,但你只能得到你看到的东西——你必须自己逃避输入:)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值