[PYTHON] Je souhaite me connecter à PostgreSQL à partir de plusieurs langues

Cet article est le quatrième jour du Calendrier de l'Avent PostgreSQL 2015. Le troisième jour était kasa_zip.

Le domaine de l'analyse des données a été très occupé ces dernières années. Spark / Hadoop peut être nécessaire à grande échelle, mais le SGBDR est suffisant pour une certaine échelle. En particulier, PostgreSQL a un support JSON abondant, donc une plate-forme d'analyse de taille moyenne serait suffisante.

Alors, organisons les modules de pilotes pour se connecter à PostgreSQL à partir de chaque langue.

Pour Java

Le pilote JDBC PostgerSQL est fourni, alors utilisons-le. download

jdbc.png

Lors du choix du pilote JDBC à utiliser, choisissez en fonction de la version JDK de l'environnement d'exécution. Par exemple, JDK 1.8 nécessite un pilote JDBC42, utilisez donc l'un des 9.4 build 1202-1206. Le protocole de communication de PostgreSQL est car il est commun à 7.4 ou version ultérieure, et même si vous utilisez le pilote de 9.4, vous pouvez vous connecter à PostgreSQL 7.4 ou version ultérieure. Il n'y a pas de problème. Vous devez utiliser le dernier pilote prenant en charge le JDK que vous utilisez.

Puisque le pilote JDBC pour PostgreSQL est Pure Java, il ne nécessite pas de libpq et fonctionne indépendamment, donc seul le pilote téléchargé doit être ajouté au CLASSPATH.

Pour Python

Dans le cas de Python, il est organisé en PostgreSQL wiki. jdbc1.png

Comme vous pouvez le voir dans le tableau, Python fournit plusieurs pilotes. Entendez-vous souvent le nom dans les trois domaines suivants?

En regardant le nombre de DL, pyscopg2 est écrasant. En fait, il a été beaucoup utilisé, et il est facile à utiliser car il est compatible avec les deux séries Python 2/3. Cependant, psycopg2 dépend de ** libpq **, donc un package tel que postgresql-devel est requis.

D'un autre côté, pg8000 et py-postgresql sont implémentés en Pure Python, donc libpq n'est pas nécessaire. À cet égard, le coût d'introduction est faible, mais ** pg8000 ** prend en charge la ** série Python2 ** uniquement </ del> ** py-postgresql ** prend en charge ** la série Python3 uniquement ** Veuillez noter que.

S'il s'agit d'un outil simple, le pilote PurePython est plus simple, mais compte tenu de la stabilité, etc., il semble sûr d'utiliser ** psycopg2 **.

En passant, dans le postgres-toolkit publié par @snaga, [PsqlWrapper.py](https: // github. Une bibliothèque est implémentée qui analyse et renvoie la sortie standard sous une forme facile à utiliser tout en émettant du SQL via psql sous le nom com / uptimejp / postgres-toolkit / blob / develop / lib / PsqlWrapper.py). Si vous créez personnellement un outil léger qui fonctionne avec PostgreSQL, une telle implémentation peut être une option.

Pour Node.js

Lors de la connexion à PostgreSQL avec Node.js, node-postgres est souvent utilisé. Il s'agit d'une implémentation de Pure Javascript, vous pouvez donc l'installer ci-dessous.

$ npm install pg

De plus, node-postgres a également ** pg-native ** qui utilise libpq, mais dans de nombreux cas, il semble qu'il soit utilisé par ** pg **. node-postgres renvoie le résultat de l'acquisition au format JSON.

[
    {
        "empno": "7369",
        "ename": "SMITH",
        "job": "CLERK",
        "mgr": "7902",
        "hiredate": "1980-12-17T00:00:00.000Z",
        "sal": "800.00",
        "comm": null,
        "deptno": "20"
    },
    {
        "empno": "7499",
        "ename": "ALLEN",
        "job": "SALESMAN",
        "mgr": "7698",
        "hiredate": "1981-02-20T00:00:00.000Z",
        "sal": "1600.00",
        "comm": "300.00",
        "deptno": "30"
    }
]

Le format est assez intuitif, mais le type JSON et le type JSONB ajoutés dans 9.1 et versions ultérieures sont également les suivants. Il sera retourné au format JSON.

sample_db=# create table json_test(json_col json);
CREATE TABLE
sample_db=# insert into json_test values('{"A":{"B":[1,2,3]}}'::json);
INSERT 0 1
sample_db=# insert into json_test values('{"C":{"D":[4,5]}}'::json);
INSERT 0 1

[
    {
        "json_col": {
            "A": {
                "B": [
                    1,
                    2,
                    3
                ]
            }
        }
    },
    {
        "json_col": {
            "C": {
                "D": [
                    4,
                    5
                ]
            }
        }
    }
]

Quand il s'agit de Node.js, le back-end est souvent MongoDB, mais PostgreSQL est également bien adapté pour Node.js.

Pour .NET Framework

Vous pouvez également vous connecter à PostgreSQL depuis .NET en utilisant Npgsql. Vous pouvez l'obtenir via Nuget. Npgsql est pur C #, donc il ne nécessite pas de libpq. C'est bien car parfois c'est un peu fastidieux de préparer PostgreSQL dans un environnement Windows.

Comme il est compatible avec ADO.NET, si vous avez utilisé ADO.NET avec d'autres bases de données, vous pouvez l'utiliser sans aucune hésitation.

Au fait, Mono semble fonctionner, mais je ne l'ai pas essayé ...

Pour PHP

Puisque la fonction PostgreSQL est préparée pour php, vous l'utiliserez. Notez que php doit être compilé avec l'option ** —with-pgsql ** pour l'utiliser. De plus, ** —with-pdo-pgsql ** est requis lors de l'utilisation via PDO. Comme cela dépend de libpq, il est nécessaire d'installer un paquet tel que postgresql-devel séparément.

Vous pouvez vérifier si PostgreSQL peut être utilisé via des fonctions PostgreSQL ou PDO avec PHP qui a déjà été introduit en utilisant `` ''.

Vous pouvez également vérifier les options de compilation de ** php-config **.

Exemple d'exécution


$ ./php-config --configure-options
--prefix=/home/sample/apps/php ...--with-pgsql=/home/sample/posgrehome --with-pdo-pgsql=/home/sample/posgrehome 

Pour Ruby

Il semble que Ruby utilise souvent le module ruby-pg. Cela semble également être une implémentation qui utilise libpq, vous devez donc installer un paquet tel que postgresql-devel séparément.

gem install pg

De plus, si vous construisez PostgreSQL à partir des sources, installez-le dans un répertoire différent de celui habituel, et ce sera moss lorsque vous installerez ruby-pg. Dans ce cas, spécifiez le chemin vers ** pg_config ** comme suit. (Il est également écrit dans le manuel)

gem install pg -- --with-pg-config=<path to pg_config>

à la fin

En gros, j'ai résumé l'histoire de l'utilisation de PostgreSQL à partir de plusieurs langues. Il existe un ensemble complet de pilotes pour les principaux langages, donc si vous n'avez pas encore utilisé PostgreSQL, pourquoi ne pas l'essayer?

Le responsable du Calendrier de l'Avent PostgreSQL 2015 Jour 5 est nuko_yokohama.

Recommended Posts

Je souhaite me connecter à PostgreSQL à partir de plusieurs langues
Je veux utiliser jar de python
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
[Python] Je veux gérer 7DaysToDie depuis Discord! 1/3
Je veux faire des crises de ma tête
Je veux utiliser le solveur ceres de python
[Python] Je veux gérer 7DaysToDie depuis Discord! 2/3
Je veux créer du code C ++ à partir de code Python!
Je veux voir le nom de fichier de DataLoader
Je veux détecter des images de chats d'Instagram
Connectez-vous à Postgresql avec GO
Je veux résoudre SUDOKU
Connectez-vous à sqlite depuis python
Je veux démarrer beaucoup de processus à partir de python
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
Je souhaite calculer le temps d'arrêt autorisé à partir du taux de fonctionnement
Je veux installer le package de requirements.txt avec poésie
Je souhaite envoyer un message de Python à LINE Bot
J'ai essayé d'obtenir diverses informations de l'API codeforces
Je veux comprendre à peu près systemd
Connectez-vous à la base de données utf8mb4 à partir de python
Je veux gratter des images et les former
Connexion SSH de Windows à GCP
Je veux faire ○○ avec les Pandas
Je veux copier l'annotation de yolo
Je veux déboguer avec Python
Je veux trouver automatiquement des pièces de haute qualité à partir des vidéos que j'ai tournées
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
Je veux jouer avec le groupe de sécurité par défaut d'ALB à partir de CDK
Je veux épingler Spyder à la barre des tâches
Je veux détecter des objets avec OpenCV
Connectez-vous au VPN Packetix à partir de CentOS 7 minimal.
Connectez-vous au conteneur MySQL de Docker depuis Flask
Je veux sortir froidement sur la console
Pourquoi je suis passé de Java à Dart
Je veux trouver des variations dans diverses statistiques! Recommandation de rééchantillonnage (Bootstrap)
Je veux imprimer dans la notation d'inclusion
Je souhaite utiliser DB en utilisant l'ORM de Django à partir d'une application externe
Je veux les gratter tous ensemble.
Je veux gérer la rime part1
Je souhaite envoyer un signal uniquement du sous-thread au thread principal
Conseils pour manipuler numpy.ndarray à partir de c ++ -Je veux utiliser un itérateur-
Je veux savoir comment fonctionne LINUX!
Je veux écrire un blog avec Jupyter Notebook
[Mémo Python] Je souhaite obtenir un nombre hexadécimal à 2 chiffres à partir d'un nombre décimal
Je veux gérer la rime part3
Comment utiliser le multicœur du point de vue de plusieurs langues
Je veux créer un environnement Python
Je veux utiliser Linux sur mac
Je veux installer Python avec PythonAnywhere
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Connectez-vous à postgreSQL depuis Python et utilisez des procédures stockées dans une boucle.
J'ai écrit un test unitaire pour différentes langues
Je souhaite utiliser la console IPython Qt
Je veux afficher la barre de progression
Je veux faire un programme d'automatisation!