Часть программы, которую я собираю, - это индексирование биржевых данных. Я работаю над функцией, которая берет словарь, играет с ним, а затем вставляет его значения в мою базу данных индексации (чьи столбцы соответствуют моим ключам), используя SQLite3.
def UpdateIndex(conn, ticker, coldict):
# Do not change
itable = "reference"
#coldict format:
#{
#'ticker': 'some string'
#'starttime': 'some datetime now a string',
#'endtime': 'some datetime now a string',
#'var1name': 'some string',
#'var1method': 'some string',
#'var2name': 'something here',
#'var2method': 'something here'
#... etc.
#'varNname': 'varN'
#'varNmethod': 'somestring'
#}
coldict['ticker'] = ticker
exist = CheckIfRowExists(conn=conn, table=itable, ticker=ticker)
if exist:
UpdateRowTimes(conn=conn, tablename=itable, coldict=coldict)
else:
# Needs debugging
cols = ', '.join(coldict.keys())
values = ', '.join(['{}'.format(val) for val in coldict.values()])
command = """INSERT INTO {} ({}) VALUES ({});""".format(itable, cols, values)
#print(cols)
#print(values)
#print(command)
c = conn.cursor()
c.execute(command)
conn.commit()
Я смотрю на него, и оно кажется хорошо. Я проверяю его, используя следующее:
conn = ConnectSQL("index.db")
coldict = {"starttime": 0, "endtime": 49}
UpdateIndex(conn=conn, ticker="IBM", coldict=coldict)
Когда я запускаю его с включенными функциями печати, мой вывод выглядит как
starttime, endtime, ticker
0, 49, IBM
INSERT INTO reference (starttime, endtime, ticker) VALUES (0, 49, IBM);
Traceback (most recent call last):
File "/Users/dominictarro/Desktop/Code/Python/Sparro-Stock/scripts/pipe_inputs.py", line 189, in <module>
UpdateIndex(conn=conn, ticker="IBM", coldict=coldict)
File "/Users/dominictarro/Desktop/Code/Python/Sparro-Stock/scripts/pipe_inputs.py", line 102, in UpdateIndex
c.execute(command)
sqlite3.OperationalError: no such column: IBM
У кого-нибудь есть ответ, почему это происходит? Предложения о том, как это исправить?
Кроме того, для всех, кто хочет убедиться, что моя база данных построена правильно.
indexdbname = "index.db"
if os.path.isfile(indexdbname) == False:
itable = "reference"
iconn = ConnectSQL(database=indexdbname)
ic = iconn.cursor()
statement = """CREATE TABLE {} (
ticker text PRIMARY KEY,
starttime text NOT NULL,
endtime text NOT NULL
)""".format(itable)
ic.execute(statement)
iconn.close()
print("\'{}\'' made.".format(indexdbname))
else:
print("\'{}\'' already exists.".format(indexdbname))