forked from jiangwen365/pypyodbc
-
Notifications
You must be signed in to change notification settings - Fork 1
/
exceltests.py
141 lines (105 loc) · 4.52 KB
/
exceltests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/python
# Tests for reading from Excel files.
#
# I have not been able to successfully create or modify Excel files.
import sys, os, re
import unittest
from os.path import abspath
from testutils import *
CNXNSTRING = None
class ExcelTestCase(unittest.TestCase):
def __init__(self, method_name):
unittest.TestCase.__init__(self, method_name)
def setUp(self):
self.cnxn = pypyodbc.connect(CNXNSTRING, autocommit=True)
self.cursor = self.cnxn.cursor()
for i in range(3):
try:
self.cursor.execute("drop table t%d" % i)
self.cnxn.commit()
except:
pass
self.cnxn.rollback()
def tearDown(self):
try:
self.cursor.close()
self.cnxn.close()
except:
# If we've already closed the cursor or connection, exceptions are thrown.
pass
def test_getinfo_string(self):
value = self.cnxn.getinfo(pypyodbc.SQL_CATALOG_NAME_SEPARATOR)
self.assert_(isinstance(value, (unicode,str)))
def test_getinfo_bool(self):
value = self.cnxn.getinfo(pypyodbc.SQL_ACCESSIBLE_TABLES)
self.assert_(isinstance(value, bool))
def test_getinfo_int(self):
value = self.cnxn.getinfo(pypyodbc.SQL_DEFAULT_TXN_ISOLATION)
self.assert_(isinstance(value, (int, long)))
def test_getinfo_smallint(self):
value = self.cnxn.getinfo(pypyodbc.SQL_CONCAT_NULL_BEHAVIOR)
self.assert_(isinstance(value, int))
def test_read_sheet(self):
# The first method of reading data is to access worksheets by name in this format [name$].
#
# Our second sheet is named Sheet2 and has two columns. The first has values 10, 20, 30, etc.
rows = self.cursor.execute("select * from [Sheet2$]").fetchall()
self.assertEquals(len(rows), 5)
for index, row in enumerate(rows):
self.assertEquals(row.s2num, float(index + 1) * 10)
def test_read_range(self):
# The second method of reading data is to assign a name to a range of cells and access that as a table.
#
# Our first worksheet has a section named Table1. The first column has values 1, 2, 3, etc.
rows = self.cursor.execute("select * from Table1").fetchall()
self.assertEquals(len(rows), 10)
for index, row in enumerate(rows):
self.assertEquals(row.num, float(index + 1))
self.assertEquals(row.val, chr(ord('a') + index))
def test_tables(self):
# This is useful for figuring out what is available
tables = [ row.table_name for row in self.cursor.tables() ]
assert 'Sheet2$' in tables, 'tables: %s' % ' '.join(tables)
# def test_append(self):
# rows = self.cursor.execute("select s2num, s2val from [Sheet2$]").fetchall()
#
# print rows
#
# nextnum = max([ row.s2num for row in rows ]) + 10
#
# self.cursor.execute("insert into [Sheet2$](s2num, s2val) values (?, 'z')", nextnum)
#
# row = self.cursor.execute("select s2num, s2val from [Sheet2$] where s2num=?", nextnum).fetchone()
# self.assertTrue(row)
#
# print 'added:', nextnum, len(rows), 'rows'
#
# self.assertEquals(row.s2num, nextnum)
# self.assertEquals(row.s2val, 'z')
#
# self.cnxn.commit()
def main():
from optparse import OptionParser
parser = OptionParser() #usage=usage)
parser.add_option("-v", "--verbose", action="count", help="Increment test verbosity (can be used multiple times)")
parser.add_option("-d", "--debug", action="store_true", default=False, help="Print debugging items")
parser.add_option("-t", "--test", help="Run only the named test")
(options, args) = parser.parse_args()
if args:
parser.error('no arguments expected')
global CNXNSTRING
path = dirname(abspath(__file__))
filename = join(path, 'test.xls')
assert os.path.exists(filename)
CNXNSTRING = 'Driver={Microsoft Excel Driver (*.xls)};DBQ=%s;READONLY=FALSE' % filename
cnxn = pypyodbc.connect(CNXNSTRING, autocommit=True)
print_library_info(cnxn)
cnxn.close()
suite = load_tests(ExcelTestCase, options.test)
testRunner = unittest.TextTestRunner(verbosity=options.verbose)
result = testRunner.run(suite)
if __name__ == '__main__':
# Add the build directory to the path so we're testing the latest build, not the installed version.
add_to_path()
import pypyodbc
main()