Как присоединиться к БД постгрес и создать там таблицу?

Привет ! В учебных целях запустил на докере базу данных + adminer

Docker-compose:

version: '3.1'

services:
tgbot:
container_name: bot
build:
context: .
command: python main.py
restart: always

db:
image: postgres
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- ./pgdata:/var/lib/postgresql/data

adminer:
image: adminer
restart: always
ports:
- 8080:8080

Dockerfile:

FROM python:3.9

RUN mkdir /src
WORKDIR /src
COPY . /src
RUN pip install -r requirements.txt

КОД:


from aiogram import Bot, Dispatcher, executor
from aiogram.types import Message
import logging
import psycopg2
from aiogram.dispatcher.filters.builtin import CommandStart, Text





bot = Bot(token = 'СЕКРЕТ')
dp = Dispatcher(bot)
logging.basicConfig(format=u'%(filename)s [LINE:%(lineno)d] #%(levelname)-8s [%(asctime)s]  %(message)s',
                    level=logging.INFO)




@dp.message_handler(CommandStart())
async def welcome(message: Message):
    user_id = message.chat.id
    conn = psycopg2.connect(dbname = "postgres",
                            user = "postgres",
                            password = "postgres",
                            host = "localhost",
                            port = 5432)

    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS id_list(id_number INTEGER);")
    cursor.execute("INSERT INTO id_list(id_number) VALUES(%s)",(user_id,))
    conn.commit()
    conn.close()

@dp.message_handler(Text(equals=["kuku"]))
async def feedback_press_button(message: Message):
    conn = psycopg2.connect(dbname="postgres",
                            user="postgres",
                            password="postgres",
                            host="localhost",
                            port=5432)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM id_list")
    grab_data = cursor.fetchall()
    for val in grab_data:
        await message.answer(val[0])
    conn.commit()
    conn.close()

    await message.answer("OK")



if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)


Когда логинюсь через админер(localhost:8080) на базу постгреса используя эти данные:

Движок = PostgreSQL
Сервер = db
Имя пользователя = postgres
Пароль = postgres

60db7522edffe692876919.png

Но когда выполняется код:
conn = psycopg2.connect(dbname = "postgres",
                            user = "postgres",
                            password = "postgres",
                            host = "localhost",
                            port = 5432)

    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS id_list(id_number INTEGER);")
    cursor.execute("INSERT INTO id_list(id_number) VALUES(%s)",(user_id,))
    conn.commit()
    conn.close()


ничего не создается, ничего не происходит. И я думаю проблема вот тут

conn = psycopg2.connect(dbname = "postgres",
                            user = "postgres",
                            password = "postgres",
                            host = "localhost",
                            port = 5432)


Помогите пожалуйста, какие данные мне нужно ввести в psycopg2.connect() чтобы присоединиться к бд и создать в ней таблицу.
  • Вопрос задан
  • 1151 просмотр
Пригласить эксперта
Ответы на вопрос 2
ky0
@ky0
Миллиардер, филантроп, патологический лгун
У вас порт СУБД наружу не открыт, добавьте в ports 5432:5432 и модифицируйте под свои нужды pg_hba.
Ответ написан
Fernus
@Fernus
Техник - Механик :)
conn = psycopg2.connect(dbname = "postgres",
user = "postgres",
password = "postgres",
host = "localhost",
port = 5432)


Укажите вместо localhost:

host = "db"

Можно обращаться по имени контейнера, которое указываете в docker-compose...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы