Как считать дату и время назад из sqlite как дата и время вместо строки в Python?

Сообщения имеются в большом количестве относительно этой темы, и помочь другим сохранить часы попытки различных решений, вот конечный результат моих часов лужения.

Эти три решения вокруг Интернета в данный момент: rubysspi apserver cntlm

rubysspi только работает от машины Windows, AFAIK, поскольку это полагается на библиотеку Win32Api. Таким образом, если Вы находитесь на поле Windows, пытающемся пробегать прокси, это - решение для Вас. Если Вы находитесь на дистрибутиве Linux, Вам не повезло.

apserver, кажется, мертвый проект. Ссылка перечислила в сообщениях, я видел вывод к 404 страницам на SourceForge. Я ищу "apserver" по возвратам SourceForge ничто.

ссылка SourceForge для cntlm, что я видел перенаправления к http://cntlm.awk.cz/ , но это испытывает таймаут. Поиск на SourceForge поднимает эту ссылку, которая действительно работает: http://sourceforge.net/projects/cntlm/

После загрузки и конфигурирования cntlm мне удалось установить драгоценный камень через прокси, таким образом, это, кажется, лучшее решение для дистрибутивов Linux.

62
задан Ciro Santilli 新疆改造中心法轮功六四事件 20 November 2015 в 20:24
поделиться

2 ответа

Если вы объявляете свой столбец с типом временной метки, вы в клевере:

>>> db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
>>> c = db.cursor()
>>> c.execute('create table foo (bar integer, baz timestamp)')
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('insert into foo values(?, ?)', (23, datetime.datetime.now()))
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('select * from foo')
<sqlite3.Cursor object at 0x40fc50>
>>> c.fetchall()
[(23, datetime.datetime(2009, 12, 1, 19, 31, 1, 40113))]

Видите? как int (для столбца, объявленного как целое число), так и datetime (для столбца, объявленного отметкой времени) выдерживают цикл приема-передачи с неизменным типом.

>>> db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
>>> c = db.cursor()
>>> c.execute('create table foo (bar integer, baz timestamp)')
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('insert into foo values(?, ?)', (23, datetime.datetime.now()))
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('select * from foo')
<sqlite3.Cursor object at 0x40fc50>
>>> c.fetchall()
[(23, datetime.datetime(2009, 12, 1, 19, 31, 1, 40113))]

Видите? как int (для столбца, объявленного как целое число), так и datetime (для столбца, объявленного отметкой времени) выдерживают цикл приема-передачи с неизменным типом.

>>> db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
>>> c = db.cursor()
>>> c.execute('create table foo (bar integer, baz timestamp)')
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('insert into foo values(?, ?)', (23, datetime.datetime.now()))
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('select * from foo')
<sqlite3.Cursor object at 0x40fc50>
>>> c.fetchall()
[(23, datetime.datetime(2009, 12, 1, 19, 31, 1, 40113))]

Видите? как int (для столбца, объявленного как целое число), так и datetime (для столбца, объявленного отметкой времени) выдерживают цикл приема-передачи с неизменным типом.

106
ответ дан 24 November 2019 в 16:43
поделиться

It turns out that sqlite3 can do this and it's even documented, kind of - but it's pretty easy to miss or misunderstand.

What I had to do is:

  • Pass the sqlite3.PARSE_COLNAMES option in the .connect() call, eg.
conn = sqlite3.connect(dbFilePath, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
  • Put the type I wanted into the query - and for datetime, it's not actually "datetime", but "timestamp":

    sql = 'SELECT jobid, startedTime as "[timestamp]" FROM job'
    
    cursor = conn.cursor()
    try:
     курсор.execute (sql)
     возвратите cursor.fetchall ()
    Ну наконец то:
     cursor.close ()
    

Если вместо этого я передам "datetime", оно будет игнорироваться, и я все равно получу строку обратно. То же, если я опущу кавычки.

21
ответ дан 24 November 2019 в 16:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: