Получить идентификатор новой записи, используя Sequelize и SQLite без автоматического увеличения - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу использовать Node.js с Sequelize и SQLite. У меня есть следующая модель для пользователей:

const User = sequelize.define('user', {
  rowid: {
    type: 'INTEGER',
    primaryKey: true,
  },
  // other properties
});

Если я сейчас выполню const newUser = await User.create({ /* properties */ }), я ожидаю, что смогу получить доступ к идентификатору нового пользователя с помощью newUser.rowid. Но это не так, только если я добавлю autoIncrement: true к спецификации. После https://www.sqlite.org/autoinc.html, Я не хочу этого делать. Есть ли другие возможности?

Редактировать

Как оказалось, это возможно только при создании таблицы без autoIncrement: true и только после этого добавьте ее в определение столбца. Вероятно, гораздо более практичным способом является использование автоинкремента, снижение производительности не будет иметь значения для большинства небольших приложений.

1 Ответ

0 голосов
/ 12 сентября 2018

Вам не нужно использовать autoincrement для доступа к rowid в таблице User.Я ожидал бы увидеть это таким образом User.rowid, а не newUser.rowid, как в примере, поскольку имя таблицы (очевидно) User.

Также из sqlite doc:

, если таблица rowid имеет первичный ключ, состоящий из одного столбца, и объявленный тип этого столбца - "INTEGER" в любой смесив верхнем и нижнем регистре столбец становится псевдонимом для rowid.Такой столбец обычно называют «целочисленным первичным ключом».Столбец PRIMARY KEY становится целочисленным первичным ключом только в том случае, если объявленное имя типа является точно «INTEGER».

И, наконец, вы можете рассмотреть другое имя, чем rowid для PK, так как sqlite ужеимеет rowid.

За исключением таблиц БЕЗ ROWID, все строки в таблицах SQLite имеют 64-разрядный целочисленный ключ со знаком, который однозначно идентифицирует строку в своей таблице.Это целое число обычно называют «rowid».Доступ к значению rowid можно получить с помощью одного из специальных независимых от регистра имен «rowid», «oid» или « rowid » вместо имени столбца.Если таблица содержит определенный пользователем столбец с именами «rowid», «oid» или « rowid », то это имя всегда ссылается на явно объявленный столбец и не может использоваться для получения целочисленного значения rowid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...