Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python中为不同的where子句执行SQL_Python_Mysql - Fatal编程技术网

从Python中为不同的where子句执行SQL

从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"

我试图通过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", 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”版本覆盖它

您需要:

  • 在循环的下一次迭代之前以某种方式存储结果,然后在循环外部处理它们
  • 在循环中处理结果
  • 类似于以下内容的内容将为您提供一个列表,其中包含fetchall()调用的两个结果:

    导入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()