Не создается таблица SQL
Не могу понять, почему не создается таблица 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 шт):
Автор решения: Namerek
→ Ссылка
Не буду даже пытаться воссоздать Ваш код, но ниже попытаюсь набросать последовательность, необходимых для решения Вашей задачи, действий
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"