Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

345
Vistas
Escribir un hash de revisión de git (SHA-1) en una base de datos PostgreSQL con psycopg2

Corto

¿Cuál es la forma más eficiente y efectiva de almacenar un hash de revisión de git (SHA-1) como f844cdc09651448d6c3e765fadac448253a16928 en una base de datos PostgreSQL (> v.11) con psycopg2 ?

Detalles y código

Tengo un hash SHA-1 como cadena hexadecimal en Python, que me gustaría almacenar en una base de datos PostgreSQL:

 import psycopg2 from subprocess import Popen, PIPE psycopg2.__version__ # prints '2.9.1 (dt dec pq3 ext lo64)' cmd_list = [ "git", "rev-parse", "HEAD", ] process = Popen(cmd_list, stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() git_sha1 = stdout.decode('ascii').strip() conn = psycopg.connect(**DB_PARAMETERS) curs = conn.cursor() sql = """UPDATE table SET git_sha1 = %(git_sha1)s WHERE id=1;""" curs.execute( sql, vars = { "git_sha1": git_sha1 } ) conn.commit() conn.close()

Por el momento, tengo un campo git_sha1 en la base de datos como VARCHAR(40) , pero como un hash de revisión de git es una cadena hexadecimal , puede ser mejor restringir los caracteres para que solo sean [0-9a-f]. Pero no me siento cómodo configurando manualmente un dominio solo para ese campo... Tengo la sensación de que debería existir una forma mejor y más robusta de hacerlo.

Entonces, ¿existe una forma mejor y más elegante de escribir este tipo de datos en una base de datos PostgreSQL ?

Versionado:

  • Python 3.6.9 (predeterminado, 26 de enero de 2021, 15:33:00)
  • git versión 2.33.1
  • psql (PostgreSQL) 12.4 (Ubuntu 12.4-1.pgdg18.04+1)
  • Ubuntu 18.04 (5.4.0-87-genérico x86_64 GNU/Linux)
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los ID de Git son sumas de comprobación SHA-1 . Estos se representan como cadenas hexadecimales de 40 caracteres, pero en realidad son números de 20 bytes. Guárdelos como datos binarios: bytea . Esto reducirá el almacenamiento a la mitad.

decode la cadena hexadecimal al insertar, encode de nuevo a hexadecimal al buscar.

 create temporary table foo ( git_id bytea ); insert into foo (git_id) values ( decode('f844cdc09651448d6c3e765fadac448253a16928', 'hex') ); select encode(git_id, 'hex') from foo;

En psycop2, o puede convertirlo a bytes y psycop hará lo correcto.

 curs.execute( sql, vars = { "git_sha1": bytes.fromhex(git_sha1) } )

Consulte Adaptación binaria en los documentos de psycop.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda