Forum >> Programmazione Python >> Database >> Import excel su Sql server con Python

Pagina: 1

Buongiorno
E' la prima volta che scrivo su quensto formun è onestamente non ho molta dimestichezza con python




Sto cercando di importre un file excel su sql server tramite python

Il file me lo importa ma il campo data è sfasato di 2gg e non capisco perchè!!!

Es. se li il file excel nel campo data ha '31/12/2019' nella tabella di sql server mi ritrovo 02/01/2020

Ho provato di tutto ma non ne vengo fuori

Grazie
Abbi pazienza ma "ho provato di tutto" è talmente tanto un'esagerazione che ogni volta che la sento...


Ora, Excel è noto per i suoi formati data un po' bislacchi, e, ancora peggio, per mescolarli silenziosamente tra di loro, in modo che occasionalmente ti ritrovi una intera colonna formattata in un modo, *tranne* uno o due campi che invece sono diversi e magari non salta subito all'occhio...

Detto questo, non so... ovviamente tu non pensi che potrebbe essere utile informarci sulle librerie che stai usando e il codice con cui le usi, quindi altrettanto ovviamente non è possibile divinare il tuo problema.


Ti consiglio di verificare che cosa, effettivamente, ottieni in python al momento di estrarre i dati dal foglio excel, prima di immetterle nel database. Se a quel livello trovi che le date sono già sbagliate, allora è un problema della libreria che usi per prendere i dati da excel. Viceversa, è un problema della libreria che usi per inserire i dati nel database. (Dico "problema" così in generale, eh? Potrebbe essere qualsiasi cosa... tu che non usi correttamente la libreria, una formattazione di default che ti è sfuggita e dovresti invece specificare meglio... qualsiasi cosa).


Ma in ultima analisi... che cosa ti importa? Se davvero il tuo problema è che le date sono tutte sbagliate di due giorni, allora basterà sottrarre due giorni prima di immetterle nel database... (è un po' nascondere la polvere sotto il tappeto, ma... talvolta...)

Prima di tutto grazie pe la tua risporta
comunque le librerie che uso sono:pyodbc,xlrd,os,shutil,time,datetime




ti giro il pezzo di codice





import pyodbc,xlrd,os,shutil,time,datetime




os.chdir("c:\dati")




try:

book = xlrd.open_workbook("c:\\Dati\\dbe.xlsx")

except FileNotFoundError:

print("Inserisci nella cartella il file da importare oppure rinomina li flie in dbe.xlsx")




try:

sheet = book.sheet_by_index(0)



except NameError:

print("")







cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=xxx\SQLEXPRESS;DATABASE=PBI;UID=xxx;PWD=xxx')

cursor = cnxn.cursor()




book = xlrd.open_workbook("c:\\Dati\\dbe.xlsx")

sh = book.sheet_by_index(0)




for aa in range(1,sh.nrows):

a1 = sh.cell_value(rowx=aa, colx=1)

a1_as_datetime = datetime.datetime(*xlrd.xldate_as_tuple(a1, book.datemode))




try:

for r in range(1, sheet.nrows):

qurey =cursor.execute('''

INSERT INTO PBI.dbo.Data ([Grower's number],Date,[Grower's name],[Product group code],[Product group],[Product code],[Product name],Location,[Transactie Wijze Code],

[Transactie Wijze Oms],[Characteristic code],Characteristic,[Characteristic value description],[Revenue Grower],[Items sold Grower],[Withdrawn from sale Grower],

[Avg. price Grower],[Number of items sold RFH],[Auction average],NOTE)

VALUES

(?,convert(datetime,(?),105),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)

''',(sheet.row_values(r,0)))

except NameError:

print("")








E questa è la tringa che tiara fuori pyton dal file excel con la libreria xlrd




[99640.0, 43905.0, 'Del Golfo Green', 'ACHI', 'Achillea', 5669.0, 'ACHIL CORONATION GOL', 'Naaldwijk', 0.0, '', 'S20', 'Minimum length of flower stem', '60 cm', '995.00', 7375.0, 1100.0, '0.135', 7375.0, '0.135', '']




il numero in rosso in excell è una data




Spero che questo ti possa aiutare per capire il mio porblema

Grazie infinite






formatta il codice con il pulsante "<>" altrimenti non si riesce neanche a indovinare...

comunque, ripeto: una volta estratta la data dal foglio excel e trasformata in datetime, fatti un bel "print" e controlla che la data che hai in python sia la stessa che hai sul foglio excel. Fai il controllo a campione un po' di volte, e vedi se è un problema di excel/xlrd o di quel misteriosissimo "convert(datetime)" che vedo di sfuggita al momento di fare la query e che onestamente non ho la più pallida idea di che cosa potrebbe essere, ma se sei sicuro tu... boh.


Comunque, cerca di separare le due cose: o il problema sta prima, o sta dopo. Devi individuare dove, poi puoi pensare a come correggerlo.



Pagina: 1



Esegui il login per scrivere una risposta.