Forum >> Programmazione Python >> Database >> PROBLEMI STRINGA CONNESSIONE DB ACCESS

Pagina: 1

Buongiorno a tutti e complimenti per il sito, davvero utile.

E' il mio primo messaggio e mi sembra opportuno una presentazione, mi chiamo Cristian e sono appassionato di informatica, da poco ho scoperto python che mi fa tornare ai vecchi tempi quando programmavo con Rexx.




Avrei necessità di un aiuto, per necessità aziendali abbiamo alcuni db di acces al quale vorrei accedere per far eseguire i automatico alcune query, ovviamente tale esecuzione potrebbe avvenire anche direttamente da access, ma visto che voglio imparare vorrei provare a farle con python.




In giro per la rete ho trovato un po' di codice che ho adattato alle mie necessità, il problema sembra essere sulla stringa di connessione al db access, che mi restituisce un errore che di seguito incollo.




il codice è il seguente




import pyodbc
elenco_query = ['q_pulisci_scadenziario','Q ACCODA KR29 20172','Q ACCODA KR29 20182']

conn_str = (
r'Driver={Microsoft Access Driver (*.mdb, *.accdb)}'
r'DBQ=E:'
r'\Exe Python\per_scadenziario.accdb;'
)

cnxn = pyodbc.connect(conn_str)
for item in elenco_query:
sql = """\
{CALL item}
"""
crsr = conn_str.execute(sql)
conn_str.commit()
crsr.close()
conn_str.close()



l'errore ricevuto:"C:\Users\Cristian\Documents\File PytonX_Monitor\venv\Scripts\python.exe" "C:/Users/Cristian/Documents/File Pyton/X Monitor/X Monitor.py"
Traceback (most recent call last):
File "C:/Users/Cristian/Documents/File Pyton/X Monitor/X Monitor.py", line 10, in <module>
cnxn = pyodbc.connect(conn_str)
pyodbc.Error: ('01S00', '01S00 Microsoft[Driver Manager ODBC] Attributo della stringa di connessione non valido. (0) (SQLDriverConnect)')Process finished with exit code 1

Grazie per l'aiuto

Buttando l'occhio su quella stringa, così a primissima vista direi che gli manca uno spazio, come minimo. Prova a fare un bel "print(conn_str)" e vedere che cosa viene fuori davvero.


Quando scrivi codice nel post, usa il pulsante del codice "<>" per formattarlo, così si capisce un po' meglio.


Detto questo, se stai imparando Python non ti conviene partire da un argomento complesso come i database. Per esempio, il tuo codice non funzionerebbe neanche se la stringa di connessione fosse giusta (per varie ragioni, tra cui perché quel "sql='''{CALL item}'''" non vuol dire nulla. L'interpolazione di stringa non funziona in questo modo). Il consiglio è sempre quello di seguire passo-passo un buon libro, mettendoci una buona dose di pazienza e dando per scontato che arriverai ai database tra un 5-6 mesi andando tranquillo.

https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
Buttando l'occhio su quella stringa, così a primissima vista direi che gli manca uno spazio, come minimo. Prova a fare un bel "print(conn_str)" e vedere che cosa viene fuori davvero.


Quando scrivi codice nel post, usa il pulsante del codice "<>" per formattarlo, così si capisce un po' meglio.


Detto questo, se stai imparando Python non ti conviene partire da un argomento complesso come i database. Per esempio, il tuo codice non funzionerebbe neanche se la stringa di connessione fosse giusta (per varie ragioni, tra cui perché quel "sql='''{CALL item}'''" non vuol dire nulla. L'interpolazione di stringa non funziona in questo modo). Il consiglio è sempre quello di seguire passo-passo un buon libro, mettendoci una buona dose di pazienza e dando per scontato che arriverai ai database tra un 5-6 mesi andando tranquillo.


Grazie per la risposta, in realtà sono un novizio in python ma conosco altri linguaggi.

Ho anche letto un libro, ovviamente base, ma ritengo per quel che riguarda la mia esperienza che si impara sul campo risolvendo i problemi che di volta in volta si presentano.

Venendo al nostro codice, non funzionava perché era necessario installare sul pc la componente Microsoft data base Engine il passo successivo è stato, come suggerito da te una corretta interpolazione della stringa di chiamata alla query di access.

In definitiva, con poche righe di codice in poco tempo di elaborazione (10 secondi) ho aggiornato il db (situazione che è ripetitiva)

Grazie comunque per il tuo interessamento


Pagina: 1



Esegui il login per scrivere una risposta.