#python #sql
#python #sql
Вопрос:
Я делаю проект для CS50x, целью которого является создание базового веб-сайта для торговли акциями, и одной из функций, которые необходимо реализовать, является возможность покупки акций.
У меня есть база данных с двумя таблицами. Один (пользователи) — это таблица с идентификатором, именем пользователя, паролем и наличными. Другая таблица (запасы) должна содержать тот же идентификатор, что и в users, затем символ запаса, а затем количество запасов, так что: идентификатор, символ, сумма.
Что я сделал, так это:
CREATE TABLE stocks(
id INTEGER,
symbol VARCHAR(10),
amount INTEGER,
PRIMARY KEY (id),
FOREIGN KEY (id)
REFERENCES users (id)
ON DELETE CASCADE
ON UPDATE NO ACTION);
Однако теперь, когда я в своем коде на Python запускаю код для вставки купленных акций в эту таблицу, я сталкиваюсь с проблемой:
ValueError: UNIQUE constraint failed: stocks.id
Идентификатор должен быть уникальным, поэтому я не могу вставить больше, чтобы купить более 1 разных акций с одной учетной записью пользователя. Как мне создать таблицу, в которой идентификатор по-прежнему связан с идентификатором в таблице users, однако я все равно могу добавить несколько разных акций под одним идентификатором?
Комментарии:
1. В общем,
id
они должны быть внутренними для базы данных и создаваться автоматически, а не передаваться при создании строки.2. Так было бы ли это лучше?:
CREATE TABLE stocks(id INTEGER, user_id INTEGER, symbol VARCHAR(10), amount INTEGER, PRIMARY KEY (id), FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE ON UPDATE NO ACTION);
Ответ №1:
Я бы попробовал это, у меня есть похожая таблица, и она отлично работает для меня, просто не забудьте указать свой внешний ключ с помощью _fk, чтобы было легче заметить, что это такое
CREATE TABLE `sites` (
`id` int(225) NOT NULL AUTO_INCREMENT,
`userID_fk` int(255) NOT NULL,
`amount` int(500) NOT NULL,
PRIMARY KEY (`id`),
KEY `userID_fk` (`userID_fk`),
CONSTRAINT `stocks_ibfk_1` FOREIGN KEY (`userID_fk`) REFERENCES `users` (`userID`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
надеюсь, это сработает для вас