1

我尝试使用 .format() 和二进制内容构建一个 sql 查询字符串(注入没有问题)。最小示例需要相同路径中的示例图像。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sqlite3 as lite
import sys

try:
    con = lite.connect(':memory:')

    cur = con.cursor()
    binary = lite.Binary(open("woman.jpg", "rb").read())

    cur.execute("CREATE TABLE 'Images' ('Data' BLOB)") 
    cur.execute("INSERT INTO Images(Data) VALUES (?)", (binary,) )

    query = "INSERT INTO Images(Data) VALUES ({0})".format(binary)
    cur.execute(query) # <- doesn't work obviously

    con.commit()    

except lite.Error, e:

    if con:
        con.rollback()

    print "Error %s:" % e.args[0]
    sys.exit(1)

finally:

    if con:
        con.close()  

就像来自http://zetcode.com/db/sqlitepythontutorial/但带有 .format() 查询生成的插入图像示例

有没有办法用 .format() 实现这一点?我想使用一致的方式将数据插入数据库。

谢谢你。

4

1 回答 1

2

您可以根据SQLite 文档将 BLOB 数据格式化为 BLOB LITERAL 值,例如

X'53514C697465'

二进制数据可以编码为十六进制数字字符串,然后使用格式插入。

with open(path, 'rb') as f:
    "X'{0}'".format(r.read().encode('hex'))
于 2013-03-07T08:57:31.503 回答