Python 如何在Postgres查询和保留值中定义变量?
我有一个Postgres数据库,我有下面的示例表 我有一个运行一段时间的函数,每次运行时,用query选择一些行并将其发送到Azure服务总线。 我想在查询中定义一个变量,并保存最后一个值,如“id”。下次运行时,从上一个值中选择数据 例如: 第一次运行:选择id为“1”和“2”的行 第二次运行:选择id为“3”和“4”的行 我的代码是:Python 如何在Postgres查询和保留值中定义变量?,python,pandas,postgresql,azureservicebus,azure-servicebus-queues,Python,Pandas,Postgresql,Azureservicebus,Azure Servicebus Queues,我有一个Postgres数据库,我有下面的示例表 我有一个运行一段时间的函数,每次运行时,用query选择一些行并将其发送到Azure服务总线。 我想在查询中定义一个变量,并保存最后一个值,如“id”。下次运行时,从上一个值中选择数据 例如: 第一次运行:选择id为“1”和“2”的行 第二次运行:选择id为“3”和“4”的行 我的代码是: import os import psycopg2 import pandas as pd from azure.servicebus import Ser
import os
import psycopg2
import pandas as pd
from azure.servicebus import ServiceBusClient, ServiceBusMessage
conndb = psycopg2.connect(
database="testDB", user="postgres", password="***", host="127.0.0.1", port="5432"
)
connstr = "****"
queue_name = '****'
data = pd.read_sql_query('''SELECT * FROM cricketers
ORDER BY id
OFFSET 0 ROWS
FETCH FIRST 2 ROW ONLY''', conndb)
data_send = data.to_string()
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_sender(queue_name) as sender:
single_message = ServiceBusMessage(data_send)
sender.send_messages(single_message)
我正在考虑在OFFSET变量行上使用一个变量
还有其他解决方案吗?一种方法是使用序列:
create seq
as int
增加2
最小值0
由板球运动员拥有
属于的只将序列和表关联,和表的序列无关。序列由setval()和nextval()设置或增加
并将查询更改为:
select *
from cricketers
order by id
offset nextval('cricketersSeq') rows
fetch first 2 row only
请注意,该序列跟踪的是行号,而不是id列。由于您使用了偏移量获取,我假设这就是您想要的
但您可以调整序列以跟踪id而不是行号:
create seq
as int
最小值0
由板球运动员拥有
您的查询将如下所示:
select setval('cricketersSeq',id) , *
from cricketers
where id >(select last_value from cricketersSeq)
order by id
limit 2;
我希望跟踪在查询中获取的最后一行。下次我将在那一排之后开始。例如,第一个查询从0到100开始,下一次查询从101到200。@Shadi然后签出第二个解决方案。