5
respostas

psycopg vs psycopg-binary

Qual a diferença?

Infelizmente o pacote normal não consigui instalar na minha maquina, só o binary, alguém poderia me explicar a diferença?

psycopg vs psycopg-binary

5 respostas

Mesmo assim nao funciona na minha maquina. Traceback (most recent call last): File "/Users/gfmolon/PycharmProjects/vinhedos_postgres/funcoes_db.py", line 1, in import psycopg ModuleNotFoundError: No module named 'psycopg'

import psycopg


def inserir_db(a, b):
    conn = psycopg.connect("dbname=costumer user=postgres")
    c = conn.cursor()
    x = conn.cursor()  # imagem
    c.execute("INSERT INTO uvas VALUES (?,?)", (a, b))
    x.execute("SELECT MAX(rowid),* FROM uvas")
    x2 = x.fetchall()
    conn.commit()
    conn.close()
    return x2[0][0]  # retorna query pra descobrir id da imagem ao criar

Consegui desinstalando tudo e instalando novamente , mas agora nao sei conectar no banco..

psycopg2.OperationalError psycopg2.OperationalError: fe_sendauth: no password supplied

Li na internet algo sobre editar o pg_hba.conf, precisa mesmo?

Consegui crirar

def mostrar_db():
    conn = psycopg2.connect("dbname=postgres user=postgres password=senha")
    c = conn.cursor()
    c.execute("SELECT rowid,* from uvas")
    conexao_mostrar = c.fetchall()
    conn.commit()
    conn.close()
    return conexao_mostrar

Ta dando o erro:

psycopg2.errors.UndefinedTable psycopg2.errors.UndefinedTable: relation "uvas" does not exist LINE 1: SELECT rowid,* from uvas ^

Oiii Guilherme, como você está? Espero que esteja bem ^-^

Peço desculpas pela demora em obter um retorno.

A psycopg2 possui dependência de uma biblioteca chamada libssl e em alguns casos, essa biblioteca sofre conflitos com programas em nosso sistema operacional que também a utiliza, o que resulta em erro de instalação. Para resolver isso a psycopg2-binary foi criado, para que reúna um pacote pré-compilado com todas as bibliotecas necessárias da psycopg2 para evitar conflitos como este.

O comportamento da psycopg2-binary é idêntico ao da psycopg2, o nome diferente é usado apenas na instalação, mas é importado da mesma forma que o principal: import psycopg2.

O erro: psycopg2.errors.UndefinedTable psycopg2.errors.UndefinedTable: relation "uvas" does not exist LINE 1: SELECT rowid,* from uvas ^ está dizendo que a tabela uvas não existe em seu banco de dados. Verifique por favor se esta tabela foi criada. E caso não exista, você pode utilizar o comando abaixo para criá-la diretamente no banco de dados, por exemplo:

CREATE TABLE uvas (id serial PRIMARY KEY, vendedor varchar(50), preco real);

Ou então, utilizar o código a seguir para criá-la através de código python:

c.execute("CREATE TABLE uvas (id serial PRIMARY KEY, vendedor varchar(50), preco real);")
conn.commit()
conn.close()

Outro detalhe, é que o ROWID não existe no PostgreSQL, um comando similar é o CTID, que também retornará um identificador da linha, por exemplo:

SELECT CTID , * from uvas

Nos retornará a seguinte tabela:

Tabela com o CTID

Porém, a documentação do PostgreSQL alerta que o CTID é inútil como um identificador de linha a longo prazo, pois ele mudará a cada vez que for atualizado o registro. Uma solução para isso é criar uma coluna e definir os identificadores manualmente.

Espero ter ajudado! Qualquer dúvida estou por aqui.

Abraços e bons estudos!