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

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

03.02.2025, 16:12. Показов 1369. Ответов 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
Сообщений: 82
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
Сообщений: 82
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
Сообщений: 82
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
Сообщений: 82
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru