как добавить внешний ключ в mysql (соединитель с python) - PullRequest
1 голос
/ 04 мая 2020

У меня есть эта часть сценария python для создания таблиц в mysql db

#Product
TABLES['product'] = (
"CREATE TABLE product"
 "(prod_id smallint,"
  "name varchar(255),"
  "price int,"
  "constraint pk_prod_id primary key (prod_id)"
 ");")

#Sales
TABLES['sales'] = (
"CREATE TABLE sales"
 "(sales_id smallint,"
  "name varchar(255),"
  "quantity int,"
  "buy_id smallint,"
  "date DATE,"  
  "constraint pk_sales_id primary key (sales_id,name)"
 ");")
#Purchase
TABLES['purchase'] = (
"CREATE TABLE purchase"
 "(purchase_id smallint,"
  "name varchar(255),"
  "quantity int,"
  "sup_id smallint,"
  "date DATE,"  
  "constraint pk_purchase_id primary key (purchase_id,name)"
  ");")

# Adding foreign key
query =  'ALTER TABLE sales ADD foreign key(buy_id) references buyers(buy_id)'
cursor.execute(query)
query = 'ALTER TABLE purchase ADD foreign key(sup_id) references suppliers(sup_id)'
cursor.execute(query)

Пока все работает нормально, но здесь есть основная проблема.

query = 'ALTER TABLE sales ADD foreign key(name) references product(name)'
cursor.execute(query)
query = 'ALTER TABLE purchase ADD foreign key(name) references product (name)'
cursor.execute(query)

код ошибки 1215, поэтому нельзя добавлять внешние ключи

Это работает, если я делаю это

query = ('ALTER TABLE sales ADD foreign key(prod_id) references product(prod_id)')
cursor.execute(query)
query = ('ALTER TABLE purchase ADD foreign key(prod_id) references product(prod_id)')
cursor.execute(query)

, но я предпочитаю работать с именем, а не с prod_id, потому что это беспорядок.

как я могу решить эту проблему? я пробовал с типом int, но мне не нравится это решение, более того, мне приходится переписывать много запросов.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Создайте табличный продукт следующим образом: KEY (имя)

#Product
TABLES['product'] = (
"CREATE TABLE product"
 "(prod_id smallint,"
  "name varchar(255),"
  "price int,"
  "constraint pk_prod_id primary key (prod_id),"
  "KEY (name)"
 ");")

И вы можете без пробелов добавить внешний ключ к названию продукта

0 голосов
/ 04 мая 2020

спасибо, все работает. Но предыдущий запрос больше не работает для istance, я мог бы сделать это;

cursor = cnx.cursor()
date = str(input('insert a date in yyyy-mm-dd :'))
query = "SELECT SUM(DISTINCT p.price*s.quantity),COUNT(p.price*s.quantity) FROM product p JOIN sales s ON  p.name = s.name WHERE s.date > "
cursor.execute(query+"'"+date+"'")

for i,j in cursor:
    print("Number of sales {}\nMoney earned {}".format(j,i))

, и результат был следующим:

insert a date in yyyy-mm-dd :2019-06-03
Number of sales 5
Money earned 12750

, теперь это больше не работает.

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