首页 > 数据库 >python关于pymysql 执行sql语句in的用法

python关于pymysql 执行sql语句in的用法

时间:2024-09-20 13:13:05浏览次数:7  
标签:name python ids param cursor pymysql sql NAME

今天在执行python代码中发现一个有意思的事,直接看代码注意如下红色部分

name = '张三'
ids =  1, 2, 3
sql = " select NAME,  NUM,   SEX  from TEMP_T WHERE NAME = %s  and id in (%s)"
param = (name,ids)
cursor.execute(sql,param)

 发现实际执行的sql语句是:

select NAME,  NUM,   SEX  from TEMP_T WHERE NAME ='张三'  and id in (1)

语句并没有按照预期的结果执行,分析发现参数param = (name,ids)多个参数就是用逗号隔开的,估计就是这里的错误,本想着把后面的参数变成一个整体应该就可以解决。尝试了元组、列表都失败,

网上还给出param = (name,(ids,))这样写就可以解决,可能是我开发环境不同这么写依然不行。

最后用了拼接字符串的方法丝滑解决,往往简单的办法最有效,直接看完整代码。

#coding=utf-8
import random
import pymysql


# 连接数据库
connection = pymysql.connect(host='192.168.0.100', user='test', password='pwd', database='testdb',port=3306)
# 操作数据库  创建一个游标
cursor = connection.cursor()
try:
    #随机生成50个以 1-1000之间的整数
    ids = [random.randint(1, 1000) for _ in range(50)]
    # 将id列表转换为适用于SQL查询的字符串格式
    ids_str = ','.join(map(str, ids))
    # 随机获取100个账号
    # 定义SQL查询语句,使用%s作为参数占位符
    sql = " select NAME,  NUM,   SEX  from TEMP_T WHERE NAME = %s  and id in (" +ids_str +")"
    name = '张三'
    param = (name)
    # 执行SQL查询(假设你已经建立了数据库连接和游标)
    cursor.execute(sql,param)
    mame = ''
    num = ''
    sex = ''
    # 获取查询结果
    rows = cursor.fetchall()
    for row in rows:
        mame = row[0]
        num = row[1]
        sex = row[2]

except pymysql.Error as e:
    print(f'错误:,{e}')

cursor.close()  # 关闭游标
connection.close()

 

标签:name,python,ids,param,cursor,pymysql,sql,NAME
From: https://www.cnblogs.com/yclh/p/18422325

相关文章

  • Python中的For循环:探索其无限可能
    引言在编程中,重复执行一系列操作是极其常见的需求。想象一下,如果你需要打印1至100之间的所有偶数,或者计算一个数组中所有元素的总和,手动输入显然不是明智之选。这时,for循环就展现出了它的重要性和便利性。通过for循环,我们可以轻松地迭代列表、元组、字符串等数据结构中的每......
  • MySQL数据备份和恢复
    MySQL数据备份和恢复完整解决方案一、备份策略设计备份类型:全量备份:备份整个数据库,适合定期执行。增量备份:只备份自上次备份以来变更的数据,适合频繁备份。差异备份:备份自上次全量备份以来的所有变更。备份频率:根据业务需求确定备份频率,例如每天、每周或每小时。备份窗......
  • Python中的树与图:构建复杂数据结构的艺术
    引言随着大数据时代的到来,我们面临的数据不再是简单的线性关系,而是错综复杂的网状结构。树和图正是用于表示这类复杂关系的最佳工具。树是一种特殊的图,它具有层次结构;而图则更加灵活,能够表达任意节点之间的连接关系。掌握树与图的实现方法,不仅有助于提高算法设计能力,还能为......
  • Python中的魔法:栈与队列的奇妙之旅
    引言在软件开发过程中,我们常常需要处理大量的数据,并以特定的方式组织这些数据以便于后续的操作。例如,在浏览器的历史记录管理、函数调用的过程控制、打印机的任务调度等场景下,栈与队列便大显身手。栈遵循后进先出(LIFO,LastInFirstOut)原则,而队列则是先进先出(FIFO,First......
  • Python学习:range、xrange和arange的区别
    range生成左闭右开区间的整数。例子见下:np.arange生成左闭右开区间内的小数。例子见下:range和xrange有版本区别(这部分转载):Python3range()函数返回的是一个可迭代对象(类型是对象),而不是列表类型,所以打印的时候不会打印列表。Python3list()函数是对象迭代器,可以把ra......
  • 158.337 Queries (SQL/LINQ), Triggers
    158.337GroupProjectInstructions:PartB(Coursemark- 17.5%)Youwillcontinuetoworkingroups*forthisassignment.Youdonotneedto registeragain but in case you change your group membership please let us know via emailing Indu (i......
  • 计算机毕业设计推荐-基于python+Django的学生签到考勤管理系统【源码+文档+讲解】
    精彩专栏推荐订阅:在下方主页......
  • 【实战篇】MySQL是怎么保证高可用的?
    背景在一个主备关系中,每个备库接收主库的binlog并执行。正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是,MySQL要提供高可用能力,只有最终一致性是不够的。主备切换可能是一个主动运维动......
  • 【实战篇】MySQL是怎么保证主备一致的?
    MySQL主备的基本原理如图1所示就是基本的主备切换流程。在状态1中,客户端的读写都直接访问节点A,而节点B是A的备库,只是将A的更新都同步过来,到本地执行。这样可以保持节点B和A的数据是相同的。当需要切换的时候,就切成状态2。这时候客户端读写访问的都是节......
  • 数据库数据恢复—SQL Server数据库附加数据库出现823错误,附加失败的数据恢复案例
    SQLServer数据库故障:SQLServer附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。SQLServer数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。SQLServer数据......