Правильно ли это получить список из SQL-запроса в Python 2.7? Использование цикла просто кажется каким-то ложным. Есть лучший способ лучше?Правильный способ заполнения списка из SQL-запроса с помощью pyodbc
import numpy as np
import pyodbc as SQL
from datetime import datetime
con = SQL.connect('Driver={SQL Server};Server=MyServer; Database=MyDB; UID=MyUser; PWD=MyPassword')
cursor = con.cursor()
#Function to convert the unicode dates returned by SQL Server into Python datetime objects
ConvertToDate = lambda s:datetime.strptime(s,"%Y-%m-%d")
#Parameters
Code = 'GBPZAR'
date_query = '''
SELECT DISTINCT TradeDate
FROM MTM
WHERE Code = ?
and TradeDate > '2009-04-08'
ORDER BY TradeDate
'''
#Get a list of dates from SQL
cursor.execute(date_query, [Code])
rows = cursor.fetchall()
Dates = [None]*len(rows) #Initialize array
r = 0
for row in rows:
Dates[r] = ConvertToDate(row[0])
r += 1
Edit:
А когда я хочу поставить запрос в структурированный массив? На данный момент я сделать что-то вроде этого:
#Initialize the structured array
AllData = np.zeros(num_rows, dtype=[('TradeDate', datetime),
('Expiry', datetime),
('Moneyness', float),
('Volatility', float)])
#Iterate through the record set using the cursor and populate the structure array
r = 0
for row in cursor.execute(single_date_and_expiry_query, [TradeDate, Code, Expiry]):
AllData[r] = (ConvertToDate(row[0]), ConvertToDate(row[1])) + row[2:] #Convert th0e date columns and concatenate the numeric columns
r += 1
Отлично, Благодарю. Если я затем выполним второй запрос сразу после этого, курсор сбрасывается правильно? – Dan
Да, курсор сбрасывается с каждым новым '.execute()'. –
Извините, просто добавил к вопросу. См. Мое редактирование. Могу ли я использовать такое понимание списков, чтобы получить структурированный массив вместо списка? – Dan