Public | Automated Build

Last pushed: 8 months ago
Short Description
Entorn de Python amb connectors per a diferents bases de dades.
Full Description

Supported tags and respective Dockerfile links

What is pydb?

Es tracta d'un entorn Python amb connectors per a les següents bases de dades:

Database Packages
Druid pydruid 0.3.0
MariaDB mysqlclient 1.3.7, PyMySQL 0.7.9
MongoDB pymongo 3.3.1
MySQL mysqlclient 1.3.7, PyMySQL 0.7.9
Oracle cx_Oracle 5.2.1
PostgreSQL psycopg2 2.6.2
Redis redis 2.10.5

També incorpora la darrera versió dels segünts paquets:

  • sisaptools
  • jupyter (accessible al port 8888)
  • altres: future, matplotlib (amb basemap), numpy, pandas, paramiko, psutil, pycrypto, pytest i python-dateutil

How to use this image

$ docker run -it --rm sisap/pydb:tag

 

A note on character encoding

MySQLdb / PyMySQL

  • Consideracions prèvies:
    • El paràmetre CHARSET de la connexió serveix per codificar i decodificar en cas que s'utilitzi unicode per entrada o sortida. Hi ha una diferència important entre els dos paquets:
      • A MySQLdb executa un SET NAMES (almenys a 1.3.7), i per tant estableix character_set_client per l'entrada i character_set_results per la sortida
      • A PyMySQL no ho fa (almenys a 0.7.9), i per tant cal fer-ho específicament (INIT_COMMAND o manualment després de connectar). És imprescindible que coincideixin
      • Per ordre, primer s'executa INIT_COMMAND, després CHARSET (a MySQLdb) i després el que es faci manualment després de connectar
  • L'entrada depèn del que s'envia:
    • bytes: han de ser en la mateixa codificació que character_set_client (establert per qualsevol mètode, veure Consideracions prèvies)
    • unicode: guardarà sempre bé (internament utilitza CHARSET per fer encode a python, i el servidor utilitza character_set_client per interpretar-ho)
  • La sortida depèn del paràmetre USE_UNICODE de la connexió (default python2: depèn de si s'especifica CHARSET o no; default python3: True):
    • Si és False: retorna bytes segons el valor de character_set_results (establert per qualsevol mètode, veure Consideracions prèvies)
    • Si és True: retorna unicode (internament el servidor utilitza character_set_results per retornar, i després python utilitza CHARSET per decodificar)

Redis

  • Entrada depèn del que s'envia:
    • bytes: guarda sense modificació
    • unicode: guarda codificat segons el paràmetre CHARSET de la connexió (default: utf8)
  • Sortida depèn del paràmetre DECODE_RESPONSES de la connexió (default: False):
    • False: retorna bytes (sense modificació)
    • True: retorna unicode segons el paràmetre CHARSET de la connexió (default: utf8)

cx_Oracle

Es comporta diferent segons la versió de l'intèrpret, sense possibilitat de configuració:

  • En python2 treballa sempre en bytes amb la codificació especificada a NLS_LANG, tant per l'entrada com per la sortida
  • En python3 treballa sempre en unicode, tant per l'entrada com per la sortida (internament el servidor retorna segons NLS_LANG, i després python decodifica segons el mateix paràmetre)

pymongo

MongoDB guarda sempre en utf8

  • Entrada: Es pot enviar tant unicode com utf8, però no altres encodings
  • Sortida: Torna sempre unicode excepte si l'entrada s'ha fet amb bytes de python3; en aquest cas torna Binary en python2 i bytes en python3
Docker Pull Command
Owner
sisap
Source Repository