【发布时间】:2015-12-14 10:12:38
【问题描述】:
我必须从数据库中获取最近更新的数据。为了解决它,我将最后读取的行号保存到python的shelve中。以下代码适用于像select * from rows 这样的简单查询。我的代码是:
from pyodbc import connect
from peewee import *
import random
import shelve
import connection
d = shelve.open("data.shelve")
db = SqliteDatabase("data.db")
class Rows(Model):
valueone = IntegerField()
valuetwo = IntegerField()
class Meta:
database = db
def CreateAndPopulate():
db.connect()
db.create_tables([Rows],safe=True)
with db.atomic():
for i in range(100):
row = Rows(valueone=random.randrange(0,100),valuetwo=random.randrange(0,100))
row.save()
db.close()
def get_last_primay_key():
return d.get('max_row',0)
def doWork():
query = "select * from rows" #could be anything
conn = connection.Connection("localhost","","SQLite3 ODBC Driver","data.db","","")
max_key_query = "SELECT MAX(%s) from %s" % ("id", "rows")
max_primary_key = conn.fetch_one(max_key_query)[0]
print "max_primary_key " + str(max_primary_key)
last_primary_key = get_last_primay_key()
print "last_primary_key " + str(last_primary_key)
if max_primary_key == last_primary_key:
print "no new records"
elif max_primary_key > last_primary_key:
print "There are some datas"
optimizedQuery = query + " where id>" + str(last_primary_key)
print query
for data in conn.fetch_all(optimizedQuery):
print data
d['max_row'] = max_primary_key
# print d['max_row']
# CreateAndPopulate() # to populate data
doWork()
虽然代码适用于没有where 子句的简单查询,但查询可以是从简单到复杂的任何内容,具有joins 和多个where 子句。如果是这样,那么我添加where 的部分将失败。无论查询是什么,我如何才能从数据库中获取最后更新的数据?
PS:我无法修改数据库。我只需要从中获取。
【问题讨论】:
-
“失败”是什么意思?你得到什么错误\错误的结果?一个例子会很有用......
-
考虑像
select * from table_name join another_table on ...这样的sql,现在添加where id>...不会给我想要的结果
标签: python sqlite python-2.7 pyodbc