从Python中为不同的where子句执行SQL
我试图通过python代码打印SQL结果,我试图从for循环传递where子句的不同谓词。但是代码只从循环中获取最后一个值并给出结果 在下面的示例中,我有两个不同的id值“aaa”和“bbb”。id值为'aaa'的有4条记录,id值为'bbb'的有2条记录。 但是下面的代码只给出id值='bbb'的结果,而不是id值'aaa'的结果 谁能帮我找出我到底做错了什么从Python中为不同的where子句执行SQL,python,mysql,Python,Mysql,我试图通过python代码打印SQL结果,我试图从for循环传递where子句的不同谓词。但是代码只从循环中获取最后一个值并给出结果 在下面的示例中,我有两个不同的id值“aaa”和“bbb”。id值为'aaa'的有4条记录,id值为'bbb'的有2条记录。 但是下面的代码只给出id值='bbb'的结果,而不是id值'aaa'的结果 谁能帮我找出我到底做错了什么 import pymysql db = pymysql.connect(host="localhost", user="user1"
import pymysql
db = pymysql.connect(host="localhost", user="user1", passwd="pass1", db="db1")
cur = db.cursor()
in_lst=['aaa', 'bbb']
for i in in_lst:
Sql = "SELECT id, val, typ FROM test123 Where id='{inpt}'".format(inpt=i)
print(Sql)
cur.execute(Sql)
records = cur.fetchall()
print(records)
db.close()
我得到的结果如下
C:\Python34\python.exe C:/Users/Koushik/PycharmProjects/Test20161204/20170405.py
SELECT id, val, typ FROM test123 Where id='bbb'
(('bbb', 5, '1a'), ('bbb', 17, '1d'))
Process finished with exit code 0
在
for
循环中,您正在格式化sql语句以将“{inpt}”替换为“aaa”。但是,在使用该值执行任何操作之前,您将立即用“bbb”版本覆盖它
您需要:
导入pymysql
db=pymysql.connect(host=“localhost”,user=“user1”,passwd=“pass1”,db=“db1”)
cur=db.cursor()
in_lst=['aaa','bbb']
记录=列表()
对于i in_lst:
Sql=“从test123中选择id,val,typ,其中id='{inpt}'”。格式(inpt=i)
打印(Sql)
当前执行(Sql)
records.append(cur.fetchall())
打印(记录)
db.close()
缩进是您的问题,请根据您的需要更新代码…不,它仍然没有返回aaa的值。在我看来,不知何故for循环无法识别它是多行for循环。它像一个like-for循环一样执行,因此print语句没有打印id=aaa的sql。我如何在python中编写一个多行的for循环(比如对于C,我们可以给出{})是的,它只是缩进。Python语法非常奇怪。
import pymysql
db = pymysql.connect(host="localhost", user="root", passwd="1234", db="sakila")
cur = db.cursor()
in_lst=['1', '2']
for i in in_lst:
Sql = "SELECT * FROM actor Where actor_id='{inpt}'".format(inpt=i)
print(Sql)
cur.execute(Sql)
records = cur.fetchall()
print(records)
db.close()