1

MSSQL データベースにバイナリ (16) として md5 ハッシュを格納します。pymssql を使用して数千の値を挿入する必要があります。値を 1 つずつ挿入すると非常に遅くなりcursor.execute()ますcursor.executemany()。しかし、問題は、executemany が md5 ハッシュのリストを取得し、それを文字列として扱うため、バイナリ データを挿入できないことです...

私の挿入行は次のようになります。

# generated from hashlib.md5('somestring').hexdigest()
md5list = ['9e107d9d372bb6826bd81d3542a419d6', 'e4d909c290d0fb1ca068ffaddf22cbd0']
# query should look like this: insert into hashes (md5) values (0x9e107d9d372bb6826bd81d3542a419d6)
cursor.executemany("insert into hashes (md5) values (0x%s)", md5list) 
# now we have a query like: insert into hashes (md5) values (0x'9e107d9d372bb6826bd81d3542a419d6')

executemany でハッシュを挿入する方法はありますか?

4

1 に答える 1

0

Cursor.executemanyシーケンスの should シーケンスのクエリ パラメータ。

`int(.., 16) を使用して、16 進文字列を int に変換します。

>>> int('9e107d9d372bb6826bd81d3542a419d6', 16)
210103647840849757586127012022035159510L
>>> hex(int('9e107d9d372bb6826bd81d3542a419d6', 16))
'0x9e107d9d372bb6826bd81d3542a419d6L'

リスト内包表記を使ってみませんか?

md5list = ['9e107d9d372bb6826bd81d3542a419d6',
           'e4d909c290d0fb1ca068ffaddf22cbd0']
params = [[int(h, 16)] for h in md5list]
cursor.executemany("insert into hashes (md5) values (%s)", params)
于 2014-01-16T12:44:25.043 に答える