Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 27

Id столбец стандартной таблицы - заполнение автоматическое поля id

03.02.2025, 16:12. Показов 1430. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, начал пробовать простую задачку на связке QT + PostgeSQL

Сначала создал простую таблицу с уникальным машинным ID :

id bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 )
...
CONSTRAINT spr_firm_pkey PRIMARY KEY (id)


потом стал пробовать добавлять в нее данные через QTableView + QtSql.QSqlTableModel
схематично выглядит так примерно

SQL
1
2
3
4
5
6
7
8
modelSql = QSqlTableModel()
id = ...
name = ...
 
 r = modelSql.record()
r.setValue("id", id)
r.setValue("name", name)
modelSql.insertRecord(-1, r)
не могу заставить работать эту схему, чтобы работало заполнение автоматическое поля id
т.е. нужно задать значение id в программе и отключать, соответственно, в свойствах поля INCREMENT ..
пробовал разные варианты, но запись сохраняется только в случае, если значение id задаешь вручную и отключив первычный ключ..
не могу понять, как все-таки это делать правильно?
Как настроить поле для id, чтобы это поле заполнялось автоматически сервером ?
(вообще не ожидал здесь проблемы, в учебных уроках так все красиво)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2025, 16:12
Ответы с готовыми решениями:

Автоматическое заполнения поля по 2 параметрам разных таблиц
Не могу адекватно создать поле в форме(цена1 имя поля) что бы оно само заполнялось при заполнении 2 параметров 1 таблицы. Подскажите как...

Автоматическое заполнение полей 2 таблиц с распределением из данных поля одной таблицы
Всем привет! Подскажите, пожалуйста, как можно сделать автоматическую запись в поля ФИО таблиц "Сотрудники", "Студенты"...

Автоматическое заполнение поля таблицы/формы при вводе значения в другое поле
Добрый день, прошу помощи. Есть таблица Т1ИНДЕКС с полями «Индекс» и «Город». Есть Таблица Т2ЗАГРУЗКА с полями «№ заказа», «Индекс» и...

9
74 / 18 / 6
Регистрация: 18.01.2025
Сообщений: 83
04.02.2025, 08:14
Не совсем понятно. Если id автогенерируется в БД, зачем его вставлять?
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 27
04.02.2025, 10:20  [ТС]
Именно в этом вопрос, - как добавить запись через insertRecord (например), чтобы команда добавления сработала корректно.
У меня не получается это сделать, - только если поле id создавать вручную.
Каким должно быть поле id , чтобы оно автозаполнялось корректно ?
По идее - не должно быть проблем, но у меня не получается, спрашиваю, как ....

Добавлено через 1 минуту
главная проблема, - нет пока опыт работы PSQL

Добавлено через 8 минут
т.е. в примере выше, если убрать строку
r.setValue("id", id)

то команда все равно не сработает, если стоит not null
не понимаю, как настроить свойства поля или эту команду, что выполнялось создание записи с автозаполнением id
0
74 / 18 / 6
Регистрация: 18.01.2025
Сообщений: 83
04.02.2025, 12:16
xkein, id - вставлять вообще не нужно, никаким образом. Или возможно, я не конца все-таки понимаю суть проблемы.
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
04.02.2025, 12:52
может проблема в том что QSqlTableModel не понимает этого? возможно им как то можно управлять что бы понял

Добавлено через 10 минут
мельком посмотрел на QSqlTableModel - там у record есть же методы и свойства для решения этой проблемы
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 27
04.02.2025, 13:15  [ТС]
Проблема в том, что не получается вставить запись.
Я не знаю, какие нужно установить свойства id поля, чтобы можно было добавлять записи через модель, не задавая id вручную.
Или как по-другому добавлять записи - сама команда должна как-то иначе запускаться ...
может быть есть ссылка на статью об этом ...

Добавлено через 7 минут
да, может быть и в этом - в методах модели.

если точнее - у меня нет соответствия использованного метода модели для добавления и свойствам столбца id в PSQL
пытаюсь понять направление поисков ..
я взял структуру кода и примера, где были в таблице были простые поля, без id
этот код и работает, если id сделать простым полем, без свойств первичного ключа
т.е. вопрос в более общем смысле - дополнение записей в таблицу, где есть id not null и автозаполнение ...

Добавлено через 2 минуты
это мой практически первый (учебный) опыт с PSQL , да и с QSqlTableModel
0
74 / 18 / 6
Регистрация: 18.01.2025
Сообщений: 83
04.02.2025, 13:20
Так запись id не получается вставить, потому что в бд само генерируется это id. Нужно в модели убрать генерацию id. Видимо как-то так:
modelSql.setGenerated(modelSql.fieldinde x("id"), false)
1
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 27
04.02.2025, 13:41  [ТС]
спасибо!
вставил в тоже место перед добавлением записи, получается вот такой рантайм:
AttributeError: 'PySide6.QtSql.QSqlTableModel' object has no attribute 'setGenerated'

может, как-то по другому можно пробросить генерацию в модель ?

Добавлено через 3 минуты
чтобы вместо
r.setValue("id", id)

метод модели понимал генерацию сервером
modelSql.setGenerated(modelSql.fieldinde x("id"), False)
0
74 / 18 / 6
Регистрация: 18.01.2025
Сообщений: 83
04.02.2025, 13:48
xkein, далее затрудняюсь ответить.
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 27
04.02.2025, 13:51  [ТС]
в работающем примере, который был сделан для SqLigt, столбец id_nsi - "полноценный" id

SQL
1
2
3
4
5
6
7
query.exec("""\
            CREATE TABLE sprav (
                id_nsi INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
                nsi_name TEXT UNIQUE NOT NULL,
                file_date TEXT NOT NULL,
                file_name TEXT NOT NULL)
                """)
запись добавляется через модель - без id_nsi
SQL
1
2
3
4
5
6
r = SELF.modelSql.record()
        r.setValue("nsi_name", name)
        r.setValue("file_date", DATE)
        r.setValue("file_name", file)
        SELF.modelSql.insertRecord(-1, r)
        SELF.modelSql.select()

и все работает.
я пробую этот же практически код на PostgreSQL и добавление происходит только при ручном задании id,
я просто поменял название драйвера в коде из примера


Code
1
2
#server_SQL = "QSQLITE"
server_SQL = "QPSQL"

и подставил свою базу...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.02.2025, 13:51
Помогаю со студенческими работами здесь

Как сделать Автоматическое заполнение ключевого поля таблице
Подскажите пожалуста как сделать так чтобы ключевые поля разных таблиц заполнялись автоматом? Пример: Есть основная таблица, в ней...

Автоматическое заполнение поля таблицы
Здравствуйте. Имеются две таблицы: 1.Группы, в которой содержатся 2 поля: код группы и код факультета. 2.Учащиеся, в которой...

Автоматическое заполнение в поля таблицы (формы)
Здравствуйте! Уже нет сил, ничего не получается, что описано в подобных темах на форуме (по видимому руки не из того места растут...) у...

Автоматическое заполнение таблицы при обновлении поля штрихкода
Здравствуйте, Прошу помочь начинающему программисту :) Суть такая, я сделал базу с формами в которой 2 таблицы взаимосвязаны по...

Автоматическое заполнение данных в поле таблицы при заполнении формы по связанной таблице
Добрый день! Прошу помощи: сама в Access на уровне пользователя, но жизнь заставила.. Суть проблемы: надо прописать обработку, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru