Как правильно запросить файл базы данных sql ce 4.0 с помощью adodbapi?
У меня есть следующий метод:
def open(self, filename):
if not os.path.exists(filename):
raise IOError("Cannot find Game Database file {0}").__format__(filename)
connstr = "Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;
Data Source={0};".format(filename)
conn = adodbapi.connect(connstr)
curs = conn.cursor()
query = "Select * from Patient;"
curs.execute(query)
results = curs.fetchall()
for r in results:
print r
Когда это выполняется, следующая ошибка обрабатывается curs.execute(запрос):
(<class 'adodbapi.adodbapi.DatabaseError'>, u"(-2147352567, 'Exception occurred.', (0, u'Microsoft Cursor Engine', u'Multiple-step operation generated errors. Check each status value.', None, 0, -2147217887), None)\nCommand:\nSelect * from Patient;\nParameters:\n[]")
Я могу выполнить этот точный запрос в CompactView успешно.
Какой очевидный синтаксический сахар я не вижу? (работает: win7 pro x64, python 2.7.x, pywin32 и adodbapi успешно установлены. Строка подключения, кажется, работает - я могу подключиться и получить курсор просто отлично)
2 ответа
Используя adodbapi-2.6.0.7, я решил это с помощью следующего:
connection.connector.CursorLocation = 2
Например:
import adodbapi
file = r'FILEPATH'
connection_string = (
'Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5; Data Source={};'.format(file))
print(connection_string)
connection = adodbapi.connect(connection_string)
connection.connector.CursorLocation = 2
connection.get_table_names()
Возможно, один из выбранных столбцов таблицы имеет тип NVARCHAR(N), где N больше 127 [ 1]. Использование серверного курсора решит проблему.
conn.adoConn.CursorLocation = adodbapi.adUseServer