test(ksycopg2): 添加 Python 3 兼容性测试套件
- 实现基本连接测试验证数据库连接功能 - 添加执行 SQL 语句的测试包括创建表和插入数据 - 集成选择查询测试验证数据检索功能 - 实现 LOB 大对象类型的数据处理测试 - 添加 OID 对象标识符类型的读写测试 - 包含新数据类型支持的全面测试覆盖 - 验证中文字符和特殊符号的编码处理 - 实现测试结果检查和失败计数统计功能
This commit is contained in:
251
test_ksycopg2-for-py3.py
Normal file
251
test_ksycopg2-for-py3.py
Normal file
@@ -0,0 +1,251 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import ksycopg2
|
||||
import datetime
|
||||
|
||||
database = "training"
|
||||
user = "system"
|
||||
password = "PIvtluUE8FUXSEWJ"
|
||||
host = "192.168.1.41"
|
||||
port = "54321"
|
||||
|
||||
failed = 0
|
||||
|
||||
|
||||
def check(name, val):
|
||||
if val is None:
|
||||
global failed
|
||||
failed += 1
|
||||
else:
|
||||
if isinstance(val, ksycopg2.extensions.connection):
|
||||
print("close connection")
|
||||
val.close()
|
||||
print("test", name, "success !", "\n")
|
||||
|
||||
|
||||
def testConn():
|
||||
try:
|
||||
conn = ksycopg2.connect(
|
||||
"dbname={} user={} password={} host={} port={}".format(database, user, password, host, port))
|
||||
|
||||
# conn.set_session(autocommit=True)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return None
|
||||
else:
|
||||
return conn
|
||||
|
||||
|
||||
def testConn2():
|
||||
try:
|
||||
conn = ksycopg2.connect(database=database, user=user, password=password, host=host, port=port)
|
||||
cur = conn.cursor()
|
||||
cur.execute("select version()")
|
||||
rows = cur.fetchall()
|
||||
print("database version:", rows[0])
|
||||
|
||||
cur.close()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return None
|
||||
else:
|
||||
return conn
|
||||
|
||||
|
||||
def testExecute():
|
||||
conn = testConn()
|
||||
if conn is not None:
|
||||
cur = conn.cursor()
|
||||
|
||||
cur.execute('drop table if exists test_ksy')
|
||||
cur.execute('create table test_ksy(id integer, name TEXT)')
|
||||
|
||||
cur.execute("insert into test_ksy values(%s, %s)", (1, "John"))
|
||||
cur.execute("insert into test_ksy values(%s, %s)", (2, '中文测试文字'))
|
||||
cur.execute("insert into test_ksy values(%s, %s)", (3, '!@#¥%……'))
|
||||
|
||||
cur.close()
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return 0
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def testSelect():
|
||||
conn = testConn()
|
||||
if conn is not None:
|
||||
cur = conn.cursor()
|
||||
|
||||
cur.execute("select * from test_ksy")
|
||||
rows = cur.fetchall()
|
||||
for c in cur.description:
|
||||
print(c.name, "\t", end="")
|
||||
print()
|
||||
|
||||
for row in rows:
|
||||
for cell in row:
|
||||
print(cell, " ", end="")
|
||||
print()
|
||||
|
||||
cur.close()
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return 0
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def testLob():
|
||||
conn = testConn()
|
||||
if conn is not None:
|
||||
cur = conn.cursor()
|
||||
|
||||
cur.execute('drop table if exists test_lob')
|
||||
cur.execute('create table test_lob(id integer, b bytea, c text, ba bytea)')
|
||||
ba = bytearray("中文测试字符bytearray", "UTF8")
|
||||
b = bytes('中文测试字符bytes' * 2, "UTF8")
|
||||
u = u'中文字unicode' * 3
|
||||
s = '中文str' * 4
|
||||
|
||||
cur.execute("insert into test_lob values(%s, %s, %s, %s)", (1, ba, ba, ba))
|
||||
cur.execute("insert into test_lob values(%s, %s, %s, %s)", (2, b, b, b))
|
||||
cur.execute("insert into test_lob values(%s, %s, %s, %s)", (3, u, u, u))
|
||||
cur.execute("insert into test_lob values(%s, %s, %s, %s)", (4, s, s, s))
|
||||
|
||||
cur.execute("select * from test_lob")
|
||||
rows = cur.fetchall()
|
||||
|
||||
for row in rows:
|
||||
for cell in row:
|
||||
if isinstance(cell, memoryview):
|
||||
print(type(cell), cell[:].tobytes().decode('UTF8'), " ", end="")
|
||||
else:
|
||||
print(type(cell), cell, " ", end="")
|
||||
print()
|
||||
|
||||
cur.close()
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return 0
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def testOID():
|
||||
conn = testConn()
|
||||
if conn is not None:
|
||||
cur = conn.cursor()
|
||||
|
||||
cur.execute('drop table if exists test_oid')
|
||||
cur.execute('create table test_oid(id integer, o OID)')
|
||||
|
||||
lo1 = conn.lobject()
|
||||
lo1.write("raw data")
|
||||
cur.execute("insert into test_oid values(%s, %s)", (1, lo1.oid))
|
||||
|
||||
lo2 = conn.lobject()
|
||||
lo2.write(b'binary data')
|
||||
cur.execute("insert into test_oid values(%s, %s)", (3, lo2.oid))
|
||||
|
||||
lo3 = conn.lobject()
|
||||
lo3.write('中文数据 data')
|
||||
cur.execute("insert into test_oid values(%s, %s)", (3, lo3.oid))
|
||||
|
||||
lo1.close()
|
||||
lo2.close()
|
||||
lo3.close()
|
||||
|
||||
cur.execute("select o from test_oid")
|
||||
rows = cur.fetchall()
|
||||
for c in cur.description:
|
||||
print(c.name, "\t", end="")
|
||||
print()
|
||||
|
||||
for row in rows:
|
||||
for cell in row:
|
||||
lo_out = conn.lobject(cell)
|
||||
r = lo_out.read()
|
||||
lo_out.close()
|
||||
|
||||
print("oid:", cell, ":", r, " ", end="")
|
||||
print()
|
||||
|
||||
cur.close()
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return 0
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def testNewType():
|
||||
conn = testConn()
|
||||
if conn is not None:
|
||||
cur = conn.cursor()
|
||||
|
||||
cur.execute('drop table if exists test_newtype')
|
||||
cur.execute('''
|
||||
create table test_newtype(
|
||||
num INTEGER,
|
||||
bcb CHAR(30),
|
||||
vcb VARCHAR(30),
|
||||
dt TIMESTAMP,
|
||||
blob BYTEA,
|
||||
nclob TEXT
|
||||
)
|
||||
''')
|
||||
|
||||
cur.execute("insert into test_newtype values(%s, %s, %s, %s, %s, %s)",
|
||||
(100,
|
||||
'bpcharbyte_30',
|
||||
'varcharbyte_30',
|
||||
'2000-12-01 15:30:12',
|
||||
b'binary_data',
|
||||
'text_data'))
|
||||
|
||||
cur.execute("insert into test_newtype values(%s, %s, %s, %s, %s, %s)",
|
||||
(200,
|
||||
'中文测试数据',
|
||||
'中文测试数据',
|
||||
datetime.datetime.now(),
|
||||
'人大金仓数据库'.encode("utf-8"),
|
||||
'北京人大金仓'))
|
||||
|
||||
cur.execute("select * from test_newtype")
|
||||
rows = cur.fetchall()
|
||||
|
||||
for row in rows:
|
||||
for cell in row:
|
||||
if isinstance(cell, memoryview):
|
||||
print(cell.tobytes().decode('utf-8'), end=" ")
|
||||
else:
|
||||
print(cell, end=" ")
|
||||
print()
|
||||
|
||||
cur.close()
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return 0
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("libkci version:", ksycopg2.__libkci_version__)
|
||||
print("ksycopg2 version:", ksycopg2.__version__)
|
||||
|
||||
check("testConn", testConn())
|
||||
|
||||
check("testConn2", testConn2())
|
||||
|
||||
check("testExecute", testExecute())
|
||||
|
||||
check("testSelect", testSelect())
|
||||
|
||||
check("testLob", testLob())
|
||||
|
||||
check("testOID", testOID())
|
||||
|
||||
check("testNewType", testNewType())
|
||||
|
||||
print("failed case:", failed)
|
||||
Reference in New Issue
Block a user