【发布时间】:2019-04-07 15:00:18
【问题描述】:
我用烧瓶创建了一个登录功能,它包含一个打开与数据库的连接的代码,然后根据输入的用户名选择一个用户名。更准确地说,查询如下:
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 的原因是,如链接中所述,一旦子查询返回 NULL,IN 就会为 WHERE 子句返回 false(至少我是这样解释的)。
不幸的是,每次我在终端上运行此代码时都会出现以下语法错误:
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'WHERE username IN (SELECT username FROM user_tbl WHERE username="test.test")' 附近使用的正确语法
因此标题,你们能解释一下我的代码在语法上到底有什么错误吗?另外,您能否指出我正确的方向,因为我对此非常迷茫。
提前致谢,
创新
【问题讨论】:
标签: python mysql sql flask refactoring