gpt4 book ai didi

python - 使用子查询创建单个查询,本质上是一个带有选择查询的插入查询

转载 作者:行者123 更新时间:2023-11-29 03:16:25 25 4
gpt4 key购买 nike

我用 flask 创建了一个登录函数,它包含一个代码,该代码打开一个到数据库的连接,然后根据输入的用户名选择一个用户名。更准确地说,这是查询:

cursor.execute("""
SELECT username FROM user_tbl
WHERE username = %s""",
(self.username))

之后,我检查获取的数据的长度,如果长度为 0 则我打开另一个连接然后执行插入查询,如下所示:

cursor.execute("""
INSERT INTO
user_tbl(username,password,email,user_type)
VALUES(%s,%s,%s,%s)""",
(self.username,self.password,self.email,self.user_type))

自从使用 PHP 编码以来,我一直在执行此过程,并且想确认是否有任何方法可以将这两个查询结合起来。我一直在疯狂地研究,但似乎找不到答案……或者至少找不到有效的答案。

MySQL direct INSERT INTO with WHERE clause根据那里接受的答案,INSERT INTO...SELECT 是可行的方法,但是在研究它主要是关于将数据从另一个表传输到另一个表之后,我的目标是一个表(我很抱歉如果我遗漏了什么)。

我找不到链接,但是我找到了另一个答案,其中提到您唯一一次在 INSERT 查询中看到 WHERE 子句(除了我在上面发布的答案)是当你检查是否没有'EXISTS'时(这是有道理的并且基于那个答案我得出的结论是在插入查询中有一个where子句是可以的)。

在检查了 WHERE 子句上的子查询并遵循此链接中的示例之后:https://www.essentialsql.com/get-ready-to-learn-sql-server-21-using-subqueries-in-the-where-clause/我创建了自己的查询:

INSERT INTO user_tbl(username,password,email,user_type)
VALUES("test.test","test","test","test")
WHERE username IN
(SELECT username FROM user_tbl WHERE username="test.test");

我选择 IN 的原因是,如链接中所述,一旦子查询返回 NULLIN 将为 WHERE 返回 false子句(至少我是这样解释的)。

不幸的是,每次我在终端上运行这段代码时,我都会遇到语法错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE username IN (SELECT username FROM user_tbl WHERE username="test.test")'

因此标题,你们能解释一下我的代码在语法上究竟有什么错误吗?另外,你能不能帮我指出正确的方向,因为我对此很迷茫。

提前致谢

创新

最佳答案

我知道您想在 user_tblINSERT 一条新记录,前提是它尚不存在。

MysQL 有一个特殊的语法,称为 INSERT ... ON DUPLICATE KEY UPDATE .

为此,您需要将 username 列作为表中的主键(或具有 UNIQUE 约束)。

然后你可以简单地做:

cursor.execute(
"""
INSERT INTO user_tbl(username,password,email,user_type)
VALUES(%s,%s,%s,%s)
ON DUPLICATE KEY UPDATE username = VALUES(username)
""",
(self.username,self.password,self.email,self.user_type)
)

如果给定的用户名 不存在任何记录,则会创建一条新记录。否则,将调用 UPDATE 子句(此处只是将相同的值重新分配给 username ,这基本上是一个空操作)。

关于python - 使用子查询创建单个查询,本质上是一个带有选择查询的插入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55560350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com