MySQL python外键功能不正常

MySQL python外键功能不正常,python,mysql,sql,Python,Mysql,Sql,我试图将外键添加到引用另一个表的一个表中,但是每当我运行程序时,表中带有外键的字段都不显示。代码如下 cur.execute("CREATE TABLE IF NOT EXISTS Basic(pnid INT PRIMARY KEY AUTO_INCREMENT,Arena VARCHAR(25), CreateDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP)") cur.execute("CREATE TABLE Units(

我试图将外键添加到引用另一个表的一个表中,但是每当我运行程序时,表中带有外键的字段都不显示。代码如下

        cur.execute("CREATE TABLE IF NOT EXISTS Basic(pnid INT PRIMARY KEY AUTO_INCREMENT,Arena VARCHAR(25), CreateDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP)")
        cur.execute("CREATE TABLE Units(pnid INT, bid INT PRIMARY KEY AUTO_INCREMENT, SerialNumber VARCHAR(25), BuildNumber VARCHAR(25), CurrentDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP)")

         cur.execute("INSERT INTO Basic(Arena) VALUES(%s)", arenanumber)
         cur.execute("ALTER TABLE Units ADD FOREIGN KEY(pnid) REFERENCES Basic(pnid);")
         cur.execute("INSERT INTO Units(SerialNumber) VALUES(%s)", serialnumber)
         cur.execute("SELECT * FROM Units")
         print cur.fetchall()

这将在pnid colunm中返回一个None。在Units表中插入一行时,需要指定pnid。在您的示例中,您有一个新表,只有一行,但如果基本表中有100个条目,则数据库不知道该单元与基本表中的哪个条目相关联。在您的示例中,如果您希望将单位放在您刚刚在Basic中创建的条目上,您应该能够使用LAST_INSERT_ID()来标识ID,因此我认为它类似于以下内容:

cur.execute("CREATE TABLE IF NOT EXISTS Basic(pnid INT PRIMARY KEY AUTO_INCREMENT,Arena VARCHAR(25), CreateDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP)")
cur.execute("CREATE TABLE Units(pnid INT, bid INT PRIMARY KEY AUTO_INCREMENT, SerialNumber VARCHAR(25), BuildNumber VARCHAR(25), CurrentDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP)")
cur.execute("INSERT INTO Basic(Arena) VALUES(%s)", arenanumber)
cur.execute("ALTER TABLE Units ADD FOREIGN KEY(pnid) REFERENCES Basic(pnid);")
cur.execute("INSERT INTO Units(SerialNumber,pnid) VALUES(%s,LAST_INSERT_ID())", serialnumber)
cur.execute("SELECT * FROM Units")
print cur.fetchall()

如果这不起作用(我目前没有能力测试它),您可能需要执行SELECT LAST_INSERT_ID(),并将其存储到变量中,然后在INSERT into Units中使用该变量。

MySQLdb Python包在
游标上提供上次创建的ID。lastrowid