#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.