Ligar à base de dados a partir de Python e Node.js

Em Python use o PyMySQL (ou o mysql-connector-python); em Node.js use o mysql2. Em ambos o servidor é localhost, o nome da base e do utilizador levam o prefixo da conta, e a palavra-passe vai numa variável de ambiente, não no código. A aplicação corre pelas ferramentas «Setup Python App» e «Setup Node.js App» do cPanel.

Python

1 Crie a base e o utilizador no cPanel. Veja criar um utilizador e os privilégios.
2 Na ferramenta Setup Python App, abra a sua aplicação. No topo está o comando para entrar no ambiente virtual. Corra-o no Terminal e instale a biblioteca: pip install pymysql. Veja ambientes virtuais e pip.
3 No código:import os, pymysql
ligacao = pymysql.connect(host='localhost', user=os.environ['DB_USER'], password=os.environ['DB_PASS'], database=os.environ['DB_NAME'], charset='utf8mb4')
with ligacao.cursor() as cur:
cur.execute('SELECT NOW()')
print(cur.fetchone())
4 Defina DB_USER, DB_PASS e DB_NAME nas variáveis de ambiente da própria aplicação, no cPanel, e reinicie-a.

Node.js

1 Na ferramenta Setup Node.js App, escolha a versão e use o botão de instalação de dependências depois de acrescentar mysql2 ao package.json. Veja escolher a versão e usar o npm.
2 No código:const mysql = require('mysql2/promise');
const pool = mysql.createPool({host: 'localhost', user: process.env.DB_USER, password: process.env.DB_PASS, database: process.env.DB_NAME, charset: 'utf8mb4'});
const [linhas] = await pool.query('SELECT NOW() AS agora');
3 Use um pool e não uma ligação nova a cada pedido. As variáveis de ambiente definem-se na página da aplicação, tal como em Python.
Sintoma Causa provável
Access denied for user Nome sem o prefixo da conta, palavra-passe errada, ou utilizador não ligado à base.
Can't connect to MySQL server on 'localhost' A aplicação tentou um endereço de rede em vez de localhost. Não use o IP do servidor.
Too many connections A aplicação abre ligações e não as fecha. Veja o erro max_user_connections.
Server has gone away Ligação parada por muito tempo e depois usada. Veja as causas, por ordem.
Não escreva a palavra-passe no código. Num repositório, um segredo escrito uma vez fica no historial para sempre. Veja variáveis de ambiente e segredos.

Reaproveitar as ligações

Em ambas as linguagens, abrir uma ligação é a parte cara. Num site com visitas, uma ligação nova a cada pedido esgota as ligações disponíveis e torna tudo lento. Em Python, mantenha uma ligação por processo da aplicação, ou use um pool (o SQLAlchemy traz um). Em Node, crie o pool uma vez, ao arrancar, e use pool.query em cada pedido. E lembre-se: depois de mudar o código ou as variáveis de ambiente, reinicie a aplicação na própria ferramenta do cPanel, senão continua a correr a versão antiga.

PostgreSQL em vez de MySQL? Em Python troque a biblioteca por psycopg2-binary, em Node por pg, e a porta passa a 5432. A lógica do pool é a mesma.

A aplicação arranca mas não chega à base? Diga-nos qual é a ferramenta (Python ou Node) e o erro exacto, e vemos consigo.

Abrir um pedido de suporte

VEJA TAMBÉM

Ligar ao MySQL a partir de PHP: mysqli e PDO

Pôr uma aplicação Node.js a funcionar

Pôr uma aplicação Django a funcionar

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde $6.60/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?