2016-12-21 16 views
0

После импорта MySQLdb модуля я иду вперед и подключение к MySql Maria дб:Как создать внешний ключ MySQLDb

import MySQLdb 
db = MySQLdb.connect(host="localhost", user="user", passwd="pass", db="test") 

Теперь я хочу, чтобы создать две таблицы: Writers и Readers. Я хочу Readers иметь внешний ключи атрибута «Writer_id», который будет указывать на соответствующий 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") 

Где ошибка?

+0

1072 выглядит похож на http://stackoverflow.com/questions/13812863/1072-key-column-doesnt-exist-error-with-mysql-foreign-key, док: HTTP://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html#error_er_key_column_does_not_exits – davedwards

ответ

1
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))") 
0

необходимо сначала создать writer_id в таблице Readers, а затем установить его как внешний ключ.

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)")