【问题标题】:how to add a foreign key in mysql (connector with python)如何在mysql中添加外键(与python的连接器)
【发布时间】:2020-08-18 08:49:39
【问题描述】:

我有这部分 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)

但我更喜欢使用 name 而不是 prod_id,因为它一团糟。

我该如何解决这个问题?我尝试使用 int 类型,但我不喜欢这种解决方案,而且我必须重写很多查询。

【问题讨论】:

    标签: python mysql database mysql-connector-python


    【解决方案1】:

    用 KEY (name) 制作这样的表格产品

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

    您可以在没有探针的情况下为产品名称添加外键

    【讨论】:

    • 它有效,但我必须重写所有查询,例如:不添加以前的外键我可以使用这个:
    【解决方案2】:

    谢谢你,它有效。 但是以前的查询现在不再起作用了 例如,我可以这样做;

    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
    

    现在这不再起作用了。

    【讨论】:

    • 上一个查询。
    • 您能否进一步解释一下,我不明白哪个查询不起作用,selczt 很好并且可以提供答案。
    • 抱歉,现在可以了,填充数据库时出错!再次谢谢你了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2014-01-09
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多