Python cursor.fetchall()或其他方法fetchone()不工作
我有两种方法。。。方法1可以正常工作,但方法2Python 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
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()
在多次尝试之后。我知道在执行newcursor.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容器中作为入口点运行脚本时需要此行为。