Bonjour

Je cherche a me connecter sur une base MSACCESS avec Sqlalchemy

Version python : 3.10
Système ; windows


les prérequis PIP sont présent
  • SQLAlchemy 1.4.26
  • sqlalchemy-access 1.1.1



les prérequis windows sont :
  • une connexion odbc
  • et un paramètrage odbc sur la base MSacess en local avec le paramête ExtendedAnsiSql spécifier par la docs sqlalchemy-access


de d'insert basic ne sont plus présente...?


LE code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# coding: utf-8  
from sqlalchemy import Column, Integer, Text ,  String,  create_engine ,ForeignKey 
from sqlalchemy.orm import scoped_session, sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy import delete, insert , update ,  func ,select , null
 
# Base class used by my classes (my entities)
Base_Msaccess = declarative_base()    # Required
 
 
class T_toto( Base_Msaccess  ):
    __tablename__ = 'toto'
    ID_TOTO =  Column(Integer, primary_key=True,  autoincrement=True) 
    Nom = Column(String(100)  )
 
 
class T_titi( Base_Msaccess  ):
    __tablename__ = 'titi'
    ID_Titi =  Column(Integer, primary_key=True,  autoincrement=True) 
    Nom = Column(String(100)  )   
    Age =  Column(Integer, default =1)
 
 
if __name__ == '__main__':
 
    DBSession_msacesss = scoped_session(sessionmaker())
    engine_msacess = create_engine("access+pyodbc://@RCG-base-Accss")
    Base_Msaccess.metadata.create_all(engine_msacess)      # uniquement à la creation installe les tables
    DBSession_msacesss.remove()
    DBSession_msacesss.configure(bind=engine_msacess, autoflush=False, expire_on_commit=False)
 
 
    Base_Msaccess.metadata.drop_all(engine_msacess)
    Base_Msaccess.metadata.create_all(engine_msacess)
 
 
    stmt = (insert(T_toto).values(Nom ='toto1'))
 
    try:
        DBSession_msacesss.execute(stmt)
    except  Exception as erreur:
        print(erreur)
    stmt = (insert(T_titi).values(Nom ='lou',Age=9))
 
    try:
        DBSession_msacesss.execute(stmt)
    except  Exception as erreur:
        print(erreur)
voici le message que j'obtiens


cursor.execute(statement, parameters)
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('HY000', '[HY000] [Microsoft][Pilote ODBC Microsoft Access] Impossible d’ouvrir la base de données «\xa0|\xa0».
Ce n’est peut-être pas une base de données que votre application reconnaît, ou le fichier est peut-être endommagé. (-1206) (SQLExecDirectW)')
[SQL:
DROP TABLE toto]
(Background on this error at: https://sqlalche.me/e/14/dbapi)


Le plus curieux est que si je cherche a créer la table toto via sql avec DBeaver ; j'ai une erreur pour table existante... Mais la table n'est pas dans la liste .
Si le regarde avec le logiciel msAcess de windowe la table existe.
il semble que sqlalchmemy cherche a détruire la table alors que celle-ci existe hors sur d'autre utlisation d'SQL alchemy si la table existe le processus ne cherche pas à la détruire...???