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
| 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. |
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
|
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 |