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 docsに従って、BLOB データを BLOB LITERAL 値としてフォーマットできます。

X'53514C697465'

バイナリ データは、16 進数の文字列としてエンコードし、format を使用して挿入できます。

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