Не создается таблица SQL

Рейтинг: 0Ответов: 1Опубликовано: 25.04.2023

Не могу понять, почему не создается таблица founded_vacancy в БД с названием Vacancy.

import psycopg2
class DataBase:

    """
    Класс работы с базами данных
    """

    def __init__(self, admin_password,
                 admin_name='postgres',
                 database='Vacancy',
                 host='localhost',
                 port='5432'):

        """
        :param admin_password: Пароль от супер-пользователя
        :param admin_name: Логин супер-пользователя (default = postgres)
        :param database: База данных (default = Vacancy)
        :param host: IP (default = localhost)
        :param port: PORT (default = 5432)
        """

        try:
            self.con = psycopg2.connect(database='postgres',
                                        user=admin_name,
                                        password=admin_password,
                                        port='5432')
            self.cur = self.con.cursor()
            self.cur.execute('CREATE DATABASE Vacancy')  # создаем базу данных для хранения вакансий
            self.con.close()
            DataBase(admin_password)

        except Exception:
            try:
                self.con = psycopg2.connect(database='vacancy',
                                            user=admin_name,
                                            password=admin_password,
                                            port='5432')
                self.cur = self.con.cursor()
            except Exception as error:
                print(error)
                pass

    def create_table(self):
        try:
            self.cur.execute('CREATE TABLE founded_vacancy'  # создаем таблицу SQL для хранения найденных выкансий
                             '('
                             'ID SERIAL PRIMARY KEY,'
                             'Vacancy_name varchar(255),'
                             'Vacancy_description varchar(255),'
                             'Vacancy_Salary_max int,'
                             'Vacancy_Salary_min int,'
                             'Vacancy_Salary_cur varchar(25),'
                             'Vacancy_Salary_url varchar(255)'
                             ')')
        except Exception as err:
            print(err)
            pass
db = DataBase('5772')
db.create_table()

Ответы

▲ 1Принят

Не буду даже пытаться воссоздать Ваш код, но ниже попытаюсь набросать последовательность, необходимых для решения Вашей задачи, действий

import psycopg2 as pg

wished_dbname = 'vacancy'

conn = pg.connect('dbname=postgres user=postgres host=localhost')

with conn.cursor() as cur:
    cur.execute(
        """
        select 1 from pg_database where datname = %s
        """,
        [
            wished_dbname
        ]
    )
    db_exists = bool(cur.fetchone())

if not db_exists:
    conn.set_isolation_level(0)
    with conn.cursor() as cur:
        cur.execute(
            f"""
            create database {wished_dbname}
            """
        )
conn.close()

with pg.connect(f'dbname={wished_dbname} user=postgres host=localhost') as conn:
    with conn.cursor() as cur:
        cur.execute(
            """
            create table if not exists founded_vacancy
                (
                    id                  int generated by default as identity primary key ,
                    vacancy_name        varchar,
                    vacancy_description varchar,
                    vacancy_salary_max  int,
                    vacancy_salary_min  int,
                    vacancy_salary_cur  varchar,
                    vacancy_salary_url  varchar
                );
            """
        )
    conn.commit()

Если Вы хотите использовать в названиях объектов заглавные буквы, то пишите имя в кавычках "Vacancy_description"