Вы пытались создать столбец с именем типа 17-02-15
, но вы не были успешны, потому что нужно указывать имена столбцов, содержащие пробелы или «забавные символы». В следующем примере используется SQLite, который принимает стандартную двойную кавычку ANSI ("column name"
), но другие СУБД могут использовать другие символы, например, MySQL имеет тенденцию использовать backquotes (`column name`
), а Microsoft SQL Server обычно использует квадратные скобки ([column name]
).
Код испытания:
import datetime
import sqlite3
conn = sqlite3.connect(':memory:')
crsr = conn.cursor()
sql = 'CREATE TABLE TRACKER (id INT PRIMARY KEY)'
print(sql)
crsr.execute(sql)
conn.commit()
print("Test table created.")
print("")
val = str(datetime.datetime.now().strftime("%y-%m-%d"))
sql = 'ALTER TABLE TRACKER ADD %s INTEGER' % val
print(sql)
try:
crsr.execute(sql)
conn.commit()
print("Column added.")
except Exception as ex:
print(repr(ex))
print("")
# now try with quotes around the column name
sql = 'ALTER TABLE TRACKER ADD "%s" INTEGER' % val
print(sql)
try:
crsr.execute(sql)
conn.commit()
print("Column added.")
except Exception as ex:
print(repr(ex))
print("")
sql = 'SELECT * FROM TRACKER'
crsr.execute(sql)
print("Current column names:")
print([x[0] for x in crsr.description])
crsr.close()
conn.close()
Консоль вывода:
CREATE TABLE TRACKER (id INT PRIMARY KEY)
Test table created.
ALTER TABLE TRACKER ADD 17-02-15 INTEGER
OperationalError('near "17": syntax error',)
ALTER TABLE TRACKER ADD "17-02-15" INTEGER
Column added.
Current column names:
['id', '17-02-15']
Следует также отметить, что различные СУБД могут иметь другие ограничения на имена столбцов, например, некоторые из них могут настаивать на том, что имя столбца не начать с цифровой цифрой.
Вы действительно хотите создать столбец с именем 17-02-14? Или имя столбца должно быть «timestamp» или что-то подобное? Ошибка состоит в том, что имена таблиц SQL не могут иметь дефисы с правильными escape-символами на месте (это вызывает проблемы, если вы в ней не нуждаетесь). – Sharad
А, я этого не знал. Я хочу, чтобы название столбца было датой, поэтому я могу ссылаться на нее в будущем. Какой хороший способ сделать это? – user3364161
Вы можете использовать символы подчеркивания вместо дефиса. Кроме того, используйте формат yyyymmdd для имени столбца. – Sharad