索引搜索
在 Python 中,搜索操作是通过 Cursor 方法 find() 或 search() 来执行的。find() 方法在数据库中定位一个对象。如果找到则返回对象实例,否则返回 None。search() 方法在游标中定位一个对象,如果未找到则返回 None。然后可以使用 Cursor 导航方法 first()、last()、next() 和 prev() 在游标中滚动。
以下代码片段演示了查找和搜索操作:
conn = db.connect()
conn.startTransaction(exdb.Transaction.MCO_READ_WRITE)
# Perform simple index search: locate Record by id
cursor = conn.cursor()
# find record to update
rec = cursor.find("Record", "by_i4", 2)
...
cursor.close() #release cursor
conn.commit() # commit changes
conn.startTransaction()
cursor = conn.cursor()
cursor.search("Security", "by_SIC", exdb.Operation.Equals, SIC)
...
cursor.close()
conn.rollback()
SQL 查询
游标还可以使用 execute() 和 execute_many() 方法来执行 SQL 查询。然后可以使用 fetchone()、fetchmany() 或 fetchall() 方法来处理 SQL 查询的结果集。例如:
conn = db.connect()
cursor = conn.cursor()
cursor.execute("SELECT * FROM Metatable WHERE TableName='%s'" % clsname)
res = cursor.fetchall()
...
sql = "INSERT INTO Quote(ikey, symbol, stamp, low, high, open, close, volume) VALUES (?,?,?,?,?,?,?,?)"
params = []
for i in xrange(N_QUOTES / 2, N_QUOTES):
params.append((i, 'AA%s' % i, datetime.datetime(2017, 8, 16, 9, 30+i), 1.0, 4.0, 2.0, 3.0, i*1000))
cursor.execute_many(sql, params)
...
cursor.close()
conn.rollback()
cursor = conn.cursor()
sql = "SELECT ikey, symbol, stamp, low, high, open, close, volume FROM Quote ORDER BY ikey"
cursor.execute(sql)
count = 0
while True:
row=cursor.fetchone()
if row is None:
break
print "Row read:", row
count += 1
...
cursor.close()
conn.rollback()