Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 19, 2020 03:31:40

Gas999
Зарегистрирован: 2020-09-19
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

PostgresSQL + Python помогите с кодом.

Добрый день.
В общем тренируюсь тут на кошках как говориться. Создал таблицу в Postgres и пробую делать запросы через Python
Но столкнулся с проблемой, может кто подскажет как ее обойти.

 import psycopg2
i = 1
n = "Имя"
s = "Фамилия"
y = "0000-00-00"
t = "00:00:00"
con = psycopg2.connect(
    host = "127.0.0.1",
    database = "test",
    user = "postgres",
    password = "pass")
cur = con.cursor()
cur.execute("select id from testing_table")
rows = cur.fetchall()
for r in rows:
    print (f"id {r[0]}")
cur.close()
con.close()
i = int(input ("Введите ID:  "))
print (i)
n = str(input ("Введите Имя:  "))
print (n)
s = str(input ("Введите Фамилию:  "))
print (s)
y = str(input ("Введите гггг-мм-дд рождения:  "))
print (y)
t = str(input ("Введите 00:00:00 время:  "))
print (i, n, s, y, t)
con = psycopg2.connect(
    host = "127.0.0.1",
    database = "test",
    user = "postgres",
    password = "Best4KamCH")
    
cur = con.cursor()
cur.execute("insert into testing_table (id,name,second,year,time) values (%s, %s, %s, %s, %s)", (
    i, name, second, year, time))
cur.execute("select * from testing_table")
rows = cur.fetchall()
for r in rows:
    print (f"id {r[0]} name {r[1]} second {r[2]} year {r[3]} time {r[4]}")
con.commit()
cur.close()
con.close()

Проблема возникает при повторном запуске, т.к. ID уже существует и программа ругается на уникальность.
Идея была добавлять имя/фамилию/день рождения/время,
потом в любой момент можно было вывести список всех зарегистрированных.

Как сделать чтоб Python считывал ID и по последнему добавил +1 для того, чтоб не вводить юзеру еще и ID при вводе например имени и фамилии
1
2
3
(3+1)=4 вычисления python

Отредактировано Gas999 (Сен. 19, 2020 04:20:10)

Офлайн

#2 Сен. 19, 2020 08:52:27

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

PostgresSQL + Python помогите с кодом.

Gas999
Как сделать чтоб Python считывал ID
Это ответ на ваш вопрос. Примерно так
 new_id = max([i[0] for i in rows])+1

Ну и извините за брюзжание, напишу не по теме и не по вопросу.
ID нужен внутренней инфраструктуре СУБД, пользователю они не нужны. Обычно их вообще не задают. Это первичный ключ. Cама СУБД заботится о их уникальности. Те делать ничего не надо в питоне, только “отсечь лишнее”.

Gas999
n = str(input (“Введите Имя: ”))
Часто вижу такое, и оно меня неизменно удивляет. Что по вашему возвращает input? Строку! Так зачем строку преобразовывать в строку? Мне интересно как вы (да и огромное число других людей) такой код получаете. Я вот пишу команду которую я знаю. И которая решает мою задачу Если не получается результат ДОПИСЫВАЮ код чтобы заработало. Помоему ваш код невозможно получить, поскольку он заработает до того как вы допишете str. А написать сразу str невозможно потому что она не имеет отношения к делу. Не знать что возвращает input тоже нельзя, потому что применяешь команды которые ЗНАЕШЬ. Я в полной растерянности и недоумении. Я что-то не понимаю.

Получать курсор наверное можно при помощи with.
print тут явно лишние.



Офлайн

#3 Сен. 20, 2020 12:09:35

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

PostgresSQL + Python помогите с кодом.

Кто мешает сделать колонку id автоинкрементальным? Мне кажется, этот способ более оптимальный, чем задание нового id через питон.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version