首页 > 解决方案 > 使用带有一个查询的烧瓶将数据插入到多个 mySQL 表中

问题描述

我在 mySQL 中有两个不同的表:

'Books' ('id', 'title', 'author_id')

'Authors' ('id', 'author')

('author_id')两个 id 都是自动递增的,并且表与外键on具有一对多的关系Books。我的任务是一次性输入新作者和书籍,因为数据是通过 POST 方法从 HTML 中的相同表单发送到这些表的。

我已经在 mySQL 上手动尝试过,效果很好:

INSERT INTO authors (author, created_at, updated_at)
VALUES ('Gerald Durrell',NOW(),NOW());
INSERT INTO books (title, rating, created_at, updated_at, author_id)
VALUES ('Birds',5, NOW(),NOW(), LAST_INSERT_ID())

在我的 Flask 应用程序中,我有完全相同的查询,但系统变得疯狂并且不允许我这样做。

我的模型.py

mysql = connectToMySQL('books')
query = 'INSERT INTO authors (author, created_at, updated_at) 
VALUES (%(author)s,NOW(),NOW()); INSERT INTO books
(title, created_at, updated_at, author_id) VALUES (% .
(title)s, NOW(),NOW(), LAST_INSERT_ID());'
data = {
    'author': request.form['author'],
    'title': request.form['title'],
}
mysql.query_db(query,data)

我的html:

<form action='/addbook' method='POST'>
   <label for='title'>Book Title:</label>
   <input type="text" name='title'>
   <p>Enter new author:</p>
   <input name='author' type="text">
   <input type='submit' value='Click to add book'>
</form>

当我在 mySQL 中输入该命令时,该命令手动运行。但它在 Flask 中崩溃了。我确实知道 mySQL 和 Flask 应用程序之间的连接很好,因为我成功输入了导航到此“添加图书页面”的用户。这是在我的终端中弹出的确切错误消息:

出了点问题(1064,“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 'INSERT INTO books (title, rating, created_at, updated_at, author_id) VAL' 附近使用的正确语法”在第 1 行")

解决方法是将作者合并到书表中,但是我将无法在应用程序的不同部分中遍历作者。

标签: pythonmysqlflaskinsert

解决方案


经过一番挣扎,事实证明 Flask 并没有进行多次查询。所以我将程序更改为有两条不同的路线。

路线 1:用作者字段填充作者表。然后返回一个烧瓶自动执行的id值并将其放入会话中。

然后路线 2:使用相同的表单字段以及会话中的 author_id 字段填充 book 表。


推荐阅读