2015-02-17 4 views
2

Я использую Python с импортом pyobbc.Работа с датами в Access с использованием pyodbc, дающая ошибку «Слишком мало параметров»

Я использую Microsoft Office 2013 64bit.

Я пытаюсь запросить базу данных accdb для выбора отдельных дат в пределах диапазона и назначить их курсору, чтобы затем добавить их в список.

В базе данных My Access есть таблица с именем Closing_prices и столбец с именем Date_, который имеет тип данных «Дата/время».

Мой код выглядит следующим образом:

cursor=conx.cursor() 
query="select distinct Date_ FROM Closing_prices where Date_ >= '10/8/2011' and Date_ < '30/04/2014'" 
cursor.execute(query) 
dates=list() 
for date in cursor: 
    dates.append(date[0]) 

Однако я получаю сообщение об ошибке:

Traceback (most recent call last): 
    File "C:/Users/Stuart/PycharmProjects/untitled/Apache - Copy.py", line 20, in <module> 
cursor.execute(query) 
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)') 

Как Date_ является Задан, я также пытался:

query="select distinct Date_ FROM Closing_prices where Date_ >= '10/8/2011 00:00:00' and Date_ < '30/04/2014 00:00:00'" 

Когда я запускаю:

cursor = conx.cursor() 
query="select Date_ FROM Closing_prices" 
cursor.execute(query) 

for row in cursor: 
    print row 

print type(row[0]) 

я получаю следующий результат в качестве примера:

(datetime.datetime(2014, 3, 24, 0, 0),) 
(datetime.datetime(2014, 3, 25, 0, 0),) 
(datetime.datetime(2014, 3, 26, 0, 0),) 
(datetime.datetime(2014, 3, 27, 0, 0),) 

Я относительно новым для Python и даже новее для запросов SQL, так что может кто-то пожалуйста, указать, где я неправильно, и, возможно, как я могу измените мой код, чтобы помочь мне добавить отдельные даты в список по своему желанию.

Большое спасибо.

+0

Если вы запустили запрос непосредственно в Access, сделайте работает ли он так, как ожидалось? –

+0

Да, когда я использую: выберите отдельную Date_ FROM Closing_prices, где Date_> = # 10/8/2011 # и Date_ <# 30/04/2014 # и запустите запрос, я получаю правильный выбор дат, отображаемых в SQL-запросе окно. Я где-то читал, что запрос Access SQL требует использования # вместо одиночных кавычек. – s666

ответ

5

Для

  1. избавить себя от хлопот найти соответствующую дату разделитель и
  2. способствует хорошей практике кодирования

вы должны просто использовать параметризованный запрос так:

db = pyodbc.connect(connStr) 
crsr = db.cursor() 
sql = """ 
SELECT DISTINCT Date_ FROM Closing_prices WHERE Date_ >= ? AND Date_ < ? 
""" 
params = (datetime.date(2011, 8, 10), datetime.date(2014, 4, 30)) 
crsr.execute(sql, params) 
+1

Gord Thomson благодарит вас так много, что сработало отлично !! Это делает пару раз, когда вы помогли мне сейчас с разными запросами ... Я очень ценю ваше время. С уважением. – s666

+0

@GordThomson Я задал следующий вопрос: http://stackoverflow.com/questions/28591632/python-sql-database-query-giving-too-few-parameters-error, который очень тесно связан с этим - я успешно внедрил вашу рекомендацию в 2 SQL-запросах, но у меня проблемы с третьим - во всяком случае, вы можете быть настолько любезны, чтобы быстро взглянуть? Благодарный, как всегда .... – s666