1
レコードを増やすデータベーステーブルから一定間隔でレコードを取得しようとしています。私はPythonとpyodbcパッケージを使ってレコードの取り出しを行っています。フェッチ中に、どのようにして最後に読み込み/フェッチされた行の次の行にカーソルを向けることができるので、すべてのフェッチで新しいレコードセットが挿入されるだけです。Pythonでpyodbcを使用してカーソルを次の行に変更するには
詳細については、 私のテーブルは100レコードあり、それらはフェッチされます。 テーブルの後に200のレコードがあり、101から200までの行をフェッチしたいとします。
pyodbcカーソルがある方法はありますか? 他の提案は非常に役に立ちます。私はあなたが「新しい」行を検索するために、pyodbc、またはその他のODBCパッケージを使用することができるとは思わない
#!/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()
私の知る限りでは、あなたは、各間隔の後に(あなたは同じカーソルを使用することができます)クエリを再実行する必要があるとしています。あなたは 'my_database_table'の一部として自動インクリメントIDフィールドを持っていますか?そうであれば、Python変数を設定して最後のIDを追跡し、各間隔の後に大きい行を選択することができます。 – FlipperPA
@FlipperPA - 私は同意します。 pyodbcはクエリを再実行せずに既存のカーソルの新しい行を「参照」しないことを確認しました。私はまた、サーバー側のカーソルと1(行)のフェッチサイズでpsyopg2を試して、同じ結果を得ました。 –
@FlipperPAにあなたのコメントが通知されるようにするには、私がそこに行ったように '@'記号を使用する必要があります。 –