我想使用以下类型的python脚本中的SELECT,包含2个变量:
类似这样的事情:
SELECT *
FROM servers
WHERE id IN (32, 48, 49, 68)
GROUP
BY serial
ORDER
BY first_seen
LIMIT 4;
“in”中的ID的数量将会改变,“limit”也会根据服务的数量改变。(在本例中,我有4个服务器id,因此限制也是4个)
我尝试了以下(这是一种场景):
list_serial_client = (24,347,359,360,362,363,365,418,388,23)
my_string = ','.join(map(str, list_serial_client))
count = len(list_serial_client)
tuple = ((my_string), count)
print(tuple)
q="""SELECT \
i.id,s.serial, i.persistent_uuid, b.id, u.patchnum, u.first_seen \
FROM installs i LEFT JOIN serials s ON s.hardware_id = i.hardware_id \
LEFT JOIN updates u ON u.install_id = i.id \
LEFT JOIN buildnumbers b ON b.image_uuid = u.image_uuid \
WHERE s.serial IN (%s) \
AND i.invalidated IS NULL GROUP BY s.serial, u.first_seen \
ORDER BY first_seen DESC LIMIT %s"""
mycursor.execute(q, tuple)
for x in mycursor:
print(" >> " + str(x))
不幸的是,它仅使用第一个ID的行(本例中为24),并且忽略了限制
>> (44, 24, 'cdc9fd8d-6899-4d9c-89c3-3b71b2dd88c5', 144, 831)
>> (44, 24, 'cdc9fd8d-6899-4d9c-89c3-3b71b2dd88c5', 124, 448)
>> (44, 24, 'cdc9fd8d-6899-4d9c-89c3-3b71b2dd88c5', 106, 448)
>> (44, 24, 'cdc9fd8d-6899-4d9c-89c3-3b71b2dd88c5', 7, 448)
打印(元组)的输出如下:('24,347,359,360,362,363,365,418,388,23',10)
我想在in()部分中有“24,347,359,360,362,363,365,418,388,23”,而10在极限处
谢谢
您可以使用String.Format或f-strings,如下所示:
>>> q = 'SELECT * FROM servers WHERE id IN {} GROUP BY serial ORDER BY first_seen LIMIT {};'
>>> list_serial_client = (32, 48, 49, 68)
>>> limit = len(list_serial_client)
>>> mysql_query = q.format(list_serial_client, limit)
>>> mysql_query
'SELECT * FROM servers WHERE id IN (32, 48, 49, 68) GROUP BY serial ORDER BY first_seen LIMIT 4;'
>>>
>>>
>>> list_serial_client = (32, 48, 49, 68)
>>> limit = len(list_serial_client)
>>> mysql_query = f'SELECT * FROM servers WHERE id IN {list_serial_client} GROUP BY serial ORDER BY first_seen LIMIT {limit};'
>>> mysql_query
'SELECT * FROM servers WHERE id IN (32, 48, 49, 68) GROUP BY serial ORDER BY first_seen LIMIT 4;'
>>>
1、变量的创建和赋值 在 Python 程序中,变量是用一个变量名表示,可以是任意数据类型,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头,比如: a=88 这里的 a 就是一个变量,代表一个整数,注意一点是 Python 是不用声明数据类型的。在 Python 中 = 是赋值语句,跟其他的编程语言也是一样的,因为 Python 定义变量时不需要声明数据类型,因此可以把任意的
问题内容: 第一个问题是Value和Manager()。Value有什么区别? 其次,是否可以不使用Value共享整数变量?下面是我的示例代码。我想要的是获取一个整数值而不是Value的字典。我所做的就是在此过程之后全部更改。有没有更简单的方法? 问题答案: 使用时,您会在共享内存中获得一个对象,默认情况下,该对象使用进行同步。使用该对象时,您将得到一个控制服务器进程的对象,该服务器进程允许对象值
问题内容: 我有2个守护程序,它们应该访问相同的变量。我为全局变量创建了第3个文件,每个守护程序都可以访问该变量。但是,当一个更改变量时,另一个仍然看到默认值。 例: glob.py 守护程序a: 守护程序b: 每次我希望我将问题弄清楚时,它将打印0,并且有人可以帮助我。如果您需要更多信息,请随时询问。 问题答案: 看起来(尽管您没有明确告诉您)您正在以一种完全独立的方式运行程序:Python解释
问题内容: 我有Python类,在运行时我只需要一个实例,因此每个类只具有一个属性就足够了,而每个实例只具有一次属性就足够了。如果将有多个实例(不会发生),则所有实例应具有相同的配置。我想知道以下哪种选择更好或更“惯用”的Python。 类变量: 实例变量: 问题答案: 我有Python类,在运行时我只需要一个实例,因此每个类只具有一个属性就足够了,而每个实例只具有一次属性就足够了。如果将有多个实
问题内容: 为什么这项工作 但是扩充会导致语法错误。 我期待有另一种方式: 问题答案: 您不能在多个目标上使用增强分配语句。 引用扩充作业文档: 除了在单个语句中分配给元组和多个目标外, 由扩展赋值语句完成的赋值与普通赋值的处理方式相同。类似地,除了可能 的就地 行为外,通过扩充分配执行的二进制操作与正常的二进制操作相同。 强调我的。 就地扩展分配从转换为(每个操作员都有相应的钩子),并且不支持将
问题内容: 为了计算多元法线的CDF,我遵循了此示例(对于单变量情况),但无法解释scipy产生的输出: 产生的输出是: 如果联合CDF定义为: 则预期输出应为0到1之间的实数。 问题答案: 经过大量搜索后,我认为Noah H. Silbert的这篇博客文章描述了标准库中唯一可用于在Python中为多元正态计算cdf的现成代码。Scipy可以做到这一点,但是正如博客中提到的那样,很难找到。该方法基