Не удается вставить дату и время на sql server через pyodbc

#python #sql #date #time #pyodbc

#python #sql #Дата #время #pyodbc

Вопрос:

Я пытаюсь вставить дату и время на SQL server в среде Linux (raspbian), используя язык python.До сих пор мне удавалось подключиться к MS Sql, а также я создал таблицу и использую pyodbc.

 #! /user/bin/env python
import pyodbc 
import datetime

dsn = 'nicedcn'
user = myid
password = mypass
database = myDB

con_string = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (dsn, user, password, database)
cnxn = pyodbc.connect(con_string)
cursor = cnxn.cursor()

string = "CREATE TABLE Database3([row name] varchar(20), [my date] date), [my time]    time)"
cursor.execute(string)
cnxn.commit()
  

Эта часть выполнена без каких-либо ошибок.Это означает, что я успешно создал таблицу, верно? Или есть какие-либо проблемы?

Я пытаюсь добавить дату и время таким образом.

    now = datetime.datetime.now()
    d1 = now.date()
    t2 = now.strftime("%H-%M-%S")
    cursor.execute("insert into Database3([row name], [my date], [my time]) values (?,?,?)", 
    ('new1', d1, t2))
    cnxn.commit()
  

Но я получаю эту ошибку. pyodbc.Ошибка программирования:

(‘HY004’, ‘[HY004] [FreeTDS] [SQL Server] Недопустимый тип данных (O) (SQLBindParameter)’)

помогите мне, пожалуйста. заранее спасибо

Комментарии:

1. Я не слишком хорошо знаком с python, но вы пробовали использовать двоеточия вместо тире на время "%H:%M:%S" ?

2. Какую версию собственного клиента SQL Server вы используете?

3. Я использую MS SQL 2008 R2 Express

4. «% H:%M:% S» да, я пробовал это, но я получаю тот же результат

5. @Kevin777 2008 R2 Express — это используемая вами версия SQL Server, а не версия драйвера ODBC. Какая версия драйвера ODBC для SQL Server используется в вашем DSN? Это можно найти с помощью администратора источника данных ODBC .

Ответ №1:

Если вы используете Windows, установите последнюю версию драйвера Microsoft ODBC для SQL Server, чтобы убедиться DATE TIME , что поддерживаются типы and .

Если вы используете Linux или macOS, используйте эту страницу, чтобы определить последнюю версию драйвера, доступного для вашего дистрибутива.

Используйте заполнители параметров и передавайте значения как объекты даты и времени для текущего значения datetime.

 now = datetime.datetime.now()
sql = "insert into Database3([row name], [my date], [my time]) values (?,?,?)"
cursor.execute(sql, ('new1', now.date(), now.time()))
cnxn.commit()
  

Обратите внимание, что приведенный выше код был протестирован только в Windows.

Комментарии:

1. Я на Linux (raspberry pi)

2. @Kevin777 Обновлено ссылкой на документацию для драйвера Microsoft ODBC для SQL Server в Linux

3. есть ли какие-либо проблемы с моими типами данных??

4. date и time типы данных были введены в SQL Server 2008. Обновите FreeTDS до последней версии или используйте драйвер Microsoft ODBC для SQL Server в Linux.