Существует декоратор входного потока, java.security.DigestInputStream
, так что вы можете вычислить дайджест, используя входной поток, как обычно, вместо того, чтобы делать дополнительный проход по данным.
MessageDigest md = MessageDigest.getInstance("MD5");
try (InputStream is = Files.newInputStream(Paths.get("file.txt"));
DigestInputStream dis = new DigestInputStream(is, md))
{
/* Read decorated stream (dis) to EOF as normal... */
}
byte[] digest = md.digest();
В текущем psycopg вместо None используйте переменную, установленную в «NULL».
variable = 'NULL'
insert_query = """insert into my_table values(date'{}',{},{})"""
format_query = insert_query.format('9999-12-31', variable, variable)
curr.execute(format_query)
conn.commit()
>> insert into my_table values(date'9999-12-31',NULL,NULL)
Да, я назвал свою переменную «переменная». Большой вопль, хочешь сразиться об этом?
Более простой подход, который также практичен с высоким количеством столбцов:
Позволяют row
быть списком значений, которые будут вставлены, который может содержать None
. Для вставки его в PostgreSQL, мы делаем следующим образом
values = ','.join(["'" + str(i) + "'" if i else 'NULL' for i in row])
cursor.execute('insert into myTable VALUES ({});'.format(values))
conn.commit()