Salut à tous,
J'aimerais créer un projet Python qui utilise SQLAlchemy et pour lequel les fichiers de model soient séparés dans un répertoire (module) différent.
Malheureusement j'ai encore du mal à cerner tout les détails du système d'import ou de package de Python et j'aimerais comprendre pourquoi j'ai l'erreur suivante :
ImportError: cannot import name 'User' from 'model.user' (/Users/toto/Project/staty/model/user.py)
dans le fichier suivant (alchemy.py) :
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 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from model.user import User engine = create_engine('sqlite:///:memory:', echo=True) Session = sessionmaker(bind=engine) session = Session() Base = declarative_base() Base.metadata.create_all(engine) ed_user = User(name='ed', fullname='Ed Jones', nickname='edsnickname') session.add(ed_user) session.commit()
avec la structure de repertoire suivante :
staty
- bin
- include
- lib
- model
- user.py
alchemy.py
pyvenv.cfg
dont le fichier user.py est :
J'aimerais pouvoir bien séparer mes différents types de fichiers et à terme séparer également le code lié à la création / gestion de ma BDD en dehors du fichier de base alchemy.py.
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 from sqlalchemy import Column, Integer, String from alchemy import Base class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) fullname = Column(String) nickname = Column(String) def __repr__(self): return "<User(name='%s', fullname='%s', nickname='%s')>" % ( self.name, self.fullname, self.nickname)
J'ai essayé de créer des fichiers __init__.py dans mes repartoires mais apparemment après la version 3.3 de Python ce n'est plus nécessaire.
Qu'en pensez-vous ?
Partager