Найти - Пользователи
Полная версия: PostgresSQL + Python помогите с кодом.
Начало » Python для новичков » PostgresSQL + Python помогите с кодом.
1
Gas999
Добрый день.
В общем тренируюсь тут на кошках как говориться. Создал таблицу в 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
doza_and
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 тут явно лишние.
Rafik
Кто мешает сделать колонку id автоинкрементальным? Мне кажется, этот способ более оптимальный, чем задание нового id через питон.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB