Python 在多对多关系表中插入2个外键
我想在actor_movie表中插入一个条目。 模式:Python 在多对多关系表中插入2个外键,python,sqlite,Python,Sqlite,我想在actor_movie表中插入一个条目。 模式: CREATE TABLE movies( title TEXT NOT NULL, year INTEGER, users_rating FLOAT, descrption TEXT, imdb_url TEXT PRIMARY KEY NOT NULL ); CREATE TABLE actors( id INTEGER PRIMARY KEY AUTOINCREMENT, act
CREATE TABLE movies(
title TEXT NOT NULL,
year INTEGER,
users_rating FLOAT,
descrption TEXT,
imdb_url TEXT PRIMARY KEY NOT NULL
);
CREATE TABLE actors(
id INTEGER PRIMARY KEY AUTOINCREMENT,
actor_name TEXT NOT NULL
);
CREATE TABLE actor_movie(
actor_id INTEGER,
movie_id INTEGER,
FOREIGN KEY (actor_id) REFERENCES actors(id)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (movie_id) REFERENCES movies(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);
csv中的数据库如下所示:
title,rating,year,users_rating,votes,metascore,img_url,countries,languages,actors,genre,tagline,description,directors,runtime,imdb_url
The Longest Day,G,1962.0,7.8,"51,041",75.0,"https://m.media-amazon.com/images/M/MV5BZTM1ZjQ2YTktNDM2MS00NGY2LTkzNzItZTU4ODg1ODNkMWYxL2ltYWdlXkEyXkFqcGdeQXVyNjc1NTYyMjg@._V1_UX182_CR0,0,182,268_AL__QL50.jpg",['USA'],"['English', 'German', 'French']","['Eddie Albert', 'Paul Anka', 'Arletty', 'Jean-Louis Barrault', 'Richard Beymer', 'Hans Christian Blech', 'Bourvil', 'Richard Burton', 'Wolfgang Büttner', 'Red Buttons', 'Pauline Carton', 'Sean Connery', 'Ray Danton', 'Irina Demick', 'Fred Dur']","['Action', 'Drama', 'History', 'War']",42 STARS IN THE LONGEST DAY,"The events of D-Day, told on a grand scale from both the Allied and German points of view.","['Ken Annakin', 'Andrew Marton', '3 more credits']",178 min,https://www.imdb.com/title/tt0056197/
INSERT INTO actor_movie(actor_id, movie_id)
SELECT a.id, m.id
FROM actors a CROSS JOIN
movies m
WHERE a.actor_name = ? AND
m.title = ?;
我使用sqlite和以下命令填充movies表,这将填充movies并忽略不需要的列:
sqlite3 movies.db
> .mode csv
> .import movie.csv movies
这是我用来填充actors表的内容:
INSERT INTO actors(actor_name)
SELECT DISTINCT actors
FROM movies
WHERE actor_name NOT IN (SELECT actor_name FROM actors);
我在想,类似这样的东西可能会在演员电影中插入价值观:
INSERT INTO actor_movie(actor_id, movie_id)
SELECT id, id FROM actors, movies
WHERE actor_name, title IN (SELECT DISTINCT actors FROM movies AND ...)
或者我可以在Python(flask)中使用sqlite3来实现这一点?如果我理解正确,您可能会希望这样:
title,rating,year,users_rating,votes,metascore,img_url,countries,languages,actors,genre,tagline,description,directors,runtime,imdb_url
The Longest Day,G,1962.0,7.8,"51,041",75.0,"https://m.media-amazon.com/images/M/MV5BZTM1ZjQ2YTktNDM2MS00NGY2LTkzNzItZTU4ODg1ODNkMWYxL2ltYWdlXkEyXkFqcGdeQXVyNjc1NTYyMjg@._V1_UX182_CR0,0,182,268_AL__QL50.jpg",['USA'],"['English', 'German', 'French']","['Eddie Albert', 'Paul Anka', 'Arletty', 'Jean-Louis Barrault', 'Richard Beymer', 'Hans Christian Blech', 'Bourvil', 'Richard Burton', 'Wolfgang Büttner', 'Red Buttons', 'Pauline Carton', 'Sean Connery', 'Ray Danton', 'Irina Demick', 'Fred Dur']","['Action', 'Drama', 'History', 'War']",42 STARS IN THE LONGEST DAY,"The events of D-Day, told on a grand scale from both the Allied and German points of view.","['Ken Annakin', 'Andrew Marton', '3 more credits']",178 min,https://www.imdb.com/title/tt0056197/
INSERT INTO actor_movie(actor_id, movie_id)
SELECT a.id, m.id
FROM actors a CROSS JOIN
movies m
WHERE a.actor_name = ? AND
m.title = ?;
?
分别是演员姓名和标题的参数占位符。csv包含的列比表中的架构多。修复表的模式,发布示例数据和您希望澄清的内容。我只需要csv中的那些列。