SQL Python API
SmartESQL 是以一组紧凑的 Python 类实现的,这些类位于预构建的库中,通过 Python 数据库 API 规范为 SmartEDB 数据库提供 SQL 访问。我们鼓励开发人员访问此网站以获取有关 Python 数据库类和方法的一般信息。这些类的用法在 SQL Python SDK 示例中有演示。对于初次使用 SmartESQL 的开发人员,我们建议构建并运行 SDK 示例。
Python 中嵌入式 SmartESQL 快速入门
SmartESQL Python 包装器支持一个 SQL 引擎和一个 SQL 服务器,它们使用 Python DB API 规范在 SmartEDB 数据库上运行。开发人员可访问此网站获取有关 Python 数据库类和方法的一般信息。SmartESQL Python 应用程序使用游标方法 execute() 和 execute_many() 来执行 SQL 语句和查询。以下部分将逐步介绍构建一个简单的 Python SmartESQL 应用程序的步骤。另外,请注意,还有 Python SDK 示例演示了特定的 SmartESQL 功能。
数据库定义
至于其他 Python 应用程序,使用 SmartEDB Python API 的第一步是定义您希望在 SmartEDB 数据库中管理的类。SmartEDB Python 包装器已将 mcocomp 运行时编译在内,因此数据库模式可以像常规的 .mco 文件一样以文本形式定义。例如,以下是一个用 Python 字符串定义的简单数据库模式:
schema = '''
declare database quotes;
class Quote
{
uint8 ikey;
char<8> symbol;
time stamp;
float low;
float high;
float open;
float close;
uint4 volume;
unique tree<ikey> iidx;
unique tree<symbol> by_sym;
};
'''
打开数据库以进行 SQL 访问
要为 SQL 访问打开数据库,我们首先初始化 SmartEDB 运行时并加载数据库字典;然后打开并连接到数据库。例如:
is_disk = False
tmgr = 'mursiw'
is_shm = False
is_debug = False
#Load Runtime configuration specified by parameters
exdb.init_runtime(is_disk, tmgr, is_shm, is_debug)
dict = exdb.load_dictionary(schema, persistent=is_disk, debug=is_debug)
db = exdb.open_database(dbname='opendb', dictionary=dict, is_disk=is_disk, db_segment_size=128*1024*1024);
try:
conn = db.connect()
填充和查询数据库
为了填充数据库,我们通过调用游标方法 execute() 或 execute_many() 来执行一些 SQL 插入语句,具体如下:
N_QUOTES = 10
cursor = conn.cursor()
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)
for i in xrange(0, N_QUOTES / 2):
cursor.execute(sql, (i, 'AA%s' % i, datetime.datetime(2017, 8, 16, 9, 30+i), 1.0, 4.0, 2.0, 3.0, i*1000))
cursor.close()
conn.commit()
然后,要查询数据库,我们再次调用 execute() 方法。要遍历结果集,我们使用游标方法 fetchone() 或 fetchall() 。例如:
cursor = conn.cursor()
sql = "SELECT ikey, symbol, stamp, low, high, open, close, volume FROM Quote ORDER BY ikey"
cursor.execute(sql)
# Traverse results one at a time using fetchone()
while True:
row=cursor.fetchone()
if row is None:
break
print "Row read:", row
# Traverse results using fetchall()
sql = "SELECT * FROM Quote ORDER BY ikey"
cursor.execute(sql)
count = 0
rows = cursor.fetchall()
for row in rows:
count += 1
SmartESQL Python 运行时库
Python 包装器支持在 SmartEDB 数据库上运行的 SQL 引擎和服务器。调用 exdb.Init_runtime() 时无需额外指定库。SQL 接口主要由 SqlEngine 和 SqlServer 类组成。SqlEngine 解析并执行 SQL 查询,显示结果;SqlServer 提供网络支持,允许远程客户端通过 TCP/IP 和 SmartESQL 协议连接。
SqlEngine 可使用 SqlOpenParameters 实例传递的参数在内存中创建数据库,并为每个打开的数据库隐式创建一个 SqlEngine 对象,可通过 Connection 对象的 engine 属性访问。(有关 Python 创建和使用 SQL 服务器的示例,请参阅 SmartEDB SDK 中的 samples/python/sql/sqlserver.py。)
要使用 SmartEDB Python 包装器,需确保 PYTHONPATH 环境变量正确设置。默认安装路径为 SmartEDB SDK 的 target/bin/python 目录。
Python 数据库 API 支持
Python 包装器还支持使用 SmartESQL 接口的 DB API 接口,包括对 SQL 的序列扩展。