Я пытаюсь получить записи после регулярного интервала из таблицы базы данных, которая растет с помощью записей. Я использую Python и его пакет pyodbc для выполнения выборки записей. Во время выборки, как я могу навести курсор на следующую строку строки, которая была прочитана/взята последним, так что при каждой выборке я могу получить только новый набор вставленных записей.Как изменить курсор на следующую строку с помощью pyodbc в Python
Чтобы подробнее рассказать, мой стол имеет 100 записей, и они извлекаются. после интервала в таблице 200 записей, и я хочу получить строки от 101 до 200. И так далее.
Есть ли способ с курсором pyodbc? Или любое другое предложение было бы очень полезно.
Ниже приведен код, я пытаюсь:
#!/usr/bin/python
import pyodbc
import csv
import time
conn_str = (
"DRIVER={PostgreSQL Unicode};"
"DATABASE=postgres;"
"UID=userid;"
"PWD=database;"
"SERVER=localhost;"
"PORT=5432;"
)
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
def fetch_table(**kwargs):
qry = kwargs['qrystr']
try:
#cursor = conn.cursor()
cursor.execute(qry)
all_rows = cursor.fetchall()
rowcnt = cursor.rowcount
rownum = cursor.description
#return (rowcnt, rownum)
return all_rows
except pyodbc.ProgrammingError as e:
print ("Exception occured as :", type(e) , e)
def poll_db():
for i in [1, 2]:
stmt = "select * from my_database_table"
rows = fetch_table(qrystr = stmt)
print("***** For i = " , i , "******")
for r in rows:
print("ROW-> ", r)
time.sleep(10)
poll_db()
conn.close()
AFAIK, вам нужно будет повторно выполнить запрос (вы можете использовать тот же самый курсор) после каждого интервала. У вас есть auto-incrementing поле идентификации как часть 'my_database_table'? Если это так, вы можете установить переменную Python для отслеживания последнего идентификатора, а затем выбрать любые строки больше после каждого интервала. – FlipperPA
@FlipperPA - Я согласен. Я подтвердил, что pyodbc не будет «видеть» новые строки в существующем курсоре без повторного выполнения запроса. Я также попробовал psyopg2 с помощью серверного курсора и размером выборки 1 (строка) и получил тот же результат. –
Если вы хотите, чтобы @FlipperPA был уведомлен о вашем комментарии, вам нужно использовать знак '@', как я уже там. –