Chcę wstawić datę do MS-SQL DB. Jak mogę to zrobić?

Oto, co robię: -

a = (datetime.datetime.now()).strftime("%Y-%m-%d %H:%M:%S")
data =  {'AWB_Number':'1','Weight':'1','Length':'1','Height':'1','Width':'1','Customer_Name':'Naaptol','Scan_Time': a,'Series_Flag':'Others'}

data = (
        data['AWB_Number'], data['Weight'], data['Length'], data['Height'],
        data['Width'], data['Customer_Name'], data['Scan_Time'] ,data['Series_Flag']
        )

print data


con_string = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (aramex_dsn, aramex_user, aramex_password, aramex_database)
cnxn = pyodbc.connect(con_string)

cursor = cnxn.cursor()

cursor.execute("insert into data_AutoScale_DELHUB VALUES (%s, %s, %s, %s, %s, %s, %s, %s)" % data)
cnxn.commit()

cnxn.close()

Zwraca błąd mówiący

Traceback (most recent call last):
  File "tests.py", line 39, in <module>
    cursor.execute("insert into data_AutoScale_DELHUB VALUES (%s, %s, %s, %s, %s, %s, %s, %s)" % data)
pyodbc.ProgrammingError: ('42000', "[42000] [FreeTDS][SQL Server]Incorrect syntax near '09'. (102) (SQLExecDirectW)")

Jaki jest problem?

Poniżej znajduje się struktura bazy danych: -

    AWB_Number = models.CharField(max_length = 255)
    Weight = models.CharField(max_length = 255)
    Length = models.CharField(max_length = 255)
    Width = models.CharField(max_length = 255)
    Height = models.CharField(max_length = 255)
    Customer_Name = models.CharField(max_length = 255)
    Scan_Time = models.DateTimeField(db_index = True)
    Series_Flag = models.CharField(max_length = 255)
1
PythonEnthusiast 14 sierpień 2014, 13:30

2 odpowiedzi

Najlepsza odpowiedź

Jak widziałem Oto, myślę o wartościach datetime w bazie danych, musisz mieć obiekt datetime.dateTime, a nie ciąg. Więc po prostu zastąp

a = (datetime.datetime.now()).strftime("%Y-%m-%d %H:%M:%S")

Przez

a = datetime.datetime.now()
2
Quentin THEURET 14 sierpień 2014, 10:08

Dla każdego, kto znajdzie tutaj, aby to zrobić w bazie danych MS Access, możesz zdefiniować pole w tabeli bazy danych jako typ daty / godziny, a następnie umieść wartość daty jako pojedynczy cytatowy ciąg w wkładce lub aktualizuj zapytanie.

Ten ciąg musi być w formacie, który dostęp uznaje jako datę / godzinę, taki jak: "2/19/2018 11:44:22 lub '02 / 19/2013:44:22 '. Kierowca ODBC zajmuje się resztą, a data zakończy się w tabeli jako ważna data / godzina bazy danych.

Nie próbowałem tego z MS-SQL, ale doświadczenie mówi, że powinien działać prawie w ten sam sposób. Oto jakiś kod, który tworzy prawidłowy ciąg formatu dla MS Access:

import pandas as pd
def MSDate_Format_from_Article(self, datestr: str) -> str:
    # Start with the format: 2018-02-14T21:57:55Z
    try:
        datetime_obj = pd.to_datetime(datestr)
    except:
        log("ERROR: Bad Date!")
        return "01/01/1980 00:00:00"
    else:
        year = "{:04d}".format(datetime_obj.year)
        month = "{:02d}".format(datetime_obj.month)
        day = "{:02d}".format(datetime_obj.day)
        hour ="{:02d}".format(datetime_obj.hour)
        minute = "{:02d}".format(datetime_obj.minute)
        second = "{:02d}".format(datetime_obj.second)
        # Return the date as a string in the format: 02/19/2018 23:44:22
        return month + '/' + day + '/' + year + ' ' + hour + ':' + minute + ':' + second
0
Stephen Rauch 23 luty 2018, 01:20