如何使用 MySQLdb 创建外键
How to create Foreign Key using MySQLdb
导入 MySQLdb
模块后,我继续连接到 MySQl Maria db:
import MySQLdb
db = MySQLdb.connect(host="localhost", user="user", passwd="pass", db="test")
现在我想创建两个表:Writers
和 Readers
。我希望 Readers
有一个指向相应 Writer:
的外键属性 "Writer_id"
with db:
cHandler=db.cursor()
cHandler.execute( "CREATE TABLE Writers(Id INT PRIMARY KEY AUTO_INCREMENT)")
cHandler.execute( "CREATE TABLE Readers(Id INT PRIMARY KEY AUTO_INCREMENT, FOREIGN KEY(Writer_id) REFERENCES Writers(Id) ) ")
但是代码失败并出现错误:
_mysql_exceptions.OperationalError: (1072, "Key column 'x' doesn't exist in table")
哪里出错了?
您必须先在 Readers table 中创建 writer_id,然后再将其设置为外键。
cHandler.execute( "CREATE TABLE Readers(Id INT PRIMARY KEY AUTO_INCREMENT, Writer_id INT ) ")
cHandler.execute( "alter table Readers
add foreign key (Writer_id)
references Writers(Id)")
with db:
cHandler=db.cursor()
cHandler.execute("DROP TABLE IF EXISTS Writers")
cHandler.execute("DROP TABLE IF EXISTS Readers")
cHandler.execute("CREATE TABLE Writers(Id INT PRIMARY KEY AUTO_INCREMENT, name TEXT)")
cHandler.execute("CREATE TABLE Readers(Id INT PRIMARY KEY AUTO_INCREMENT, name TEXT, Writer_id INTEGER, FOREIGN KEY(Writer_id) REFERENCES Writers(Id))")
导入 MySQLdb
模块后,我继续连接到 MySQl Maria db:
import MySQLdb
db = MySQLdb.connect(host="localhost", user="user", passwd="pass", db="test")
现在我想创建两个表:Writers
和 Readers
。我希望 Readers
有一个指向相应 Writer:
with db:
cHandler=db.cursor()
cHandler.execute( "CREATE TABLE Writers(Id INT PRIMARY KEY AUTO_INCREMENT)")
cHandler.execute( "CREATE TABLE Readers(Id INT PRIMARY KEY AUTO_INCREMENT, FOREIGN KEY(Writer_id) REFERENCES Writers(Id) ) ")
但是代码失败并出现错误:
_mysql_exceptions.OperationalError: (1072, "Key column 'x' doesn't exist in table")
哪里出错了?
您必须先在 Readers table 中创建 writer_id,然后再将其设置为外键。
cHandler.execute( "CREATE TABLE Readers(Id INT PRIMARY KEY AUTO_INCREMENT, Writer_id INT ) ")
cHandler.execute( "alter table Readers
add foreign key (Writer_id)
references Writers(Id)")
with db:
cHandler=db.cursor()
cHandler.execute("DROP TABLE IF EXISTS Writers")
cHandler.execute("DROP TABLE IF EXISTS Readers")
cHandler.execute("CREATE TABLE Writers(Id INT PRIMARY KEY AUTO_INCREMENT, name TEXT)")
cHandler.execute("CREATE TABLE Readers(Id INT PRIMARY KEY AUTO_INCREMENT, name TEXT, Writer_id INTEGER, FOREIGN KEY(Writer_id) REFERENCES Writers(Id))")