Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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 cursor.fetchall()或其他方法fetchone()不工作_Python_Mysql Python - Fatal编程技术网

Python cursor.fetchall()或其他方法fetchone()不工作

Python cursor.fetchall()或其他方法fetchone()不工作,python,mysql-python,Python,Mysql Python,我有两种方法。。。方法1可以正常工作,但方法2cursor.fetchall()不显示任何内容,保持为空,就像[]一样。若我只执行Method2(),它工作正常,那个么问题只会在我先执行Method1()然后执行Method2()时发生 def Method1(): cursor=db.cursor() pocode=['NWB126280'] query=“从dbname.tablename中选择columnname,其中columnname=%s” cursor.execute(查询、poc

我有两种方法。。。方法1可以正常工作,但方法2
cursor.fetchall()
不显示任何内容,保持为空,就像
[]
一样。若我只执行Method2(),它工作正常,那个么问题只会在我先执行Method1()然后执行Method2()时发生

def Method1():
cursor=db.cursor()
pocode=['NWB126280']
query=“从dbname.tablename中选择columnname,其中columnname=%s”
cursor.execute(查询、pocode)
record=cursor.fetchall()
cursor.close()
打印(记录)
def Method2():
cursor=db.cursor()
文件=打开('路径')
request_json=file.read()
有效负载={'ApiOwner':ApiDetails.ApiOwner,'RequestBody':request_json,'ApiKey':
ApiDetails.ApiKey}
response=requests.post(apidestails.url,headers=apidestails.headers,data=payload)
response_json=json.load(response.text)
pocode=jsonpath.jsonpath(响应_json,“$…outputKey”)
query=“从dbname.tablename中选择columnname,其中columnname=%s”
cursor.execute(查询、pocode)
record=cursor.fetchall()
cursor.close()
打印(记录)
方法1()
方法2()

在多次尝试之后。我知道在执行new
cursor.fetchall()
之前,您必须将事务提交(
db.commit()
)到数据库中

在执行新查询之前始终提交事务

在做了这个更改之后,我的代码按预期工作

def Method1():
    cursor = db.cursor()
    pocode = ['NWB126280']
    query = "select columnname from dbname.tablename where columnname= %s"
    cursor.execute(query, pocode)
    db.commit()
    record = cursor.fetchall()
    cursor.close()
    print(record)


def Method2():
    cursor = db.cursor()
    file = open('path')
    request_json = file.read()
    payload = {'ApiOwner': ApiDetails.ApiOwner, 'RequestBody': request_json, 'ApiKey': 
    ApiDetails.ApiKey}
    response = requests.post(ApiDetails.url, headers=ApiDetails.headers, data=payload)
    response_json = json.loads(response.text)
    pocode = jsonpath.jsonpath(response_json, "$..outputKey")
    query = "select columnname from dbname.tablename where columnname= %s"
    cursor.execute(query, pocode)
    record = cursor.fetchall()
    cursor.close()
    print(record)

确保
pocode
方法2中的
pocode
Method1
相同,在
pocode
之后执行
print(pocode)
并查看结果。如果这是错误的,向后移动一层,直到找到正确的响应。问题在于,假设所有其他方法都相同,如何生成它。@这两种方法中的Poojan pocode是不同的。在方法2中,我正在使用从post API调用中重新运行的pocode。@MyNameIsCaleb已经使用了,pocode在post API响应中表现良好。请注意,方法2中的pocode与方法1不同。如果
pocode
不同,则查询结果可能不同。在
方法2中
。您可以在第二种方法中打印
pocode
的值,并在那里进行调试。很可能没有与您的
pocode
check db匹配的列名。您可以直接在db中运行从第二个方法生成的查询,并查看结果。这也解决了我的问题。无论我在网上看到什么地方,都有文章演示commit()函数与修改某些内容(更新或插入)的结合。在我的例子中,使用cursor.execute()的SELECT查询的结果在没有commit()的情况下返回为零长度,但只是有时返回。应该注意的是,在交互模式下运行脚本时不会显示此行为,但在同一docker容器中作为入口点运行脚本时需要此行为。