105 lines
2.4 KiB
Python
105 lines
2.4 KiB
Python
from peewee import *
|
|
|
|
# import os
|
|
# from dotenv import load_dotenv
|
|
|
|
# load_dotenv()
|
|
|
|
# db_name = os.environ.get("DB_NAME")
|
|
# db_user = os.environ.get("DB_USER")
|
|
# db_password = os.environ.get("DB_PASSWORD")
|
|
# db_host = os.environ.get("DB_HOST")
|
|
# db_port = os.environ.get("DB_PORT")
|
|
|
|
db_name = "company"
|
|
db_user = "root"
|
|
db_password = "MementoMarsouin96"
|
|
db_host = "localhost"
|
|
db_port = 3306
|
|
|
|
db = MySQLDatabase(
|
|
database= db_name,
|
|
user= db_user,
|
|
password= db_password,
|
|
host= db_host,
|
|
port= db_port
|
|
)
|
|
|
|
# équivalent de "Base = declarative_base()"
|
|
class BaseModel(Model):
|
|
class Meta:
|
|
database = db
|
|
|
|
# Relations One-To-Many
|
|
class User(BaseModel):
|
|
username = CharField(unique= True)
|
|
email = CharField()
|
|
|
|
class Meta:
|
|
table_name = "user"
|
|
|
|
class Todo(BaseModel):
|
|
title = CharField()
|
|
is_done = BooleanField(default= False)
|
|
user= ForeignKeyField(User, backref= "todos") # l'accès inverse est géré automatiquement
|
|
|
|
class Meta:
|
|
table_name = "todos"
|
|
|
|
class Tag(BaseModel):
|
|
name = CharField(unique= True)
|
|
|
|
class Meta:
|
|
table_name = "tag"
|
|
|
|
class TodoTag(BaseModel):
|
|
todo = ForeignKeyField(Todo)
|
|
tag = ForeignKeyField(Tag)
|
|
|
|
class Meta:
|
|
table_name = 'todo_tag'
|
|
indexes= (
|
|
(('todo', 'tag'), True),
|
|
)
|
|
|
|
class Profile(BaseModel):
|
|
user = ForeignKeyField(User, unique= True, backref= "profile") # One-To-One
|
|
bio = TextField(null= True)
|
|
avatar = CharField(null= True)
|
|
|
|
class Meta:
|
|
table_name = "profile"
|
|
|
|
db.connect()
|
|
db.create_tables([User, Todo, Profile, Tag, TodoTag])
|
|
|
|
try:
|
|
alice = User.create(username= "Alice", email= "a.smith@company.au")
|
|
Todo.create(title= "Apprendre Python", user= alice)
|
|
Todo.create(title= "Apprendre JS", user= alice)
|
|
Todo.create(title= "Apprendre COBOL", user= alice)
|
|
|
|
for todo in alice.todos:
|
|
print(todo.title, todo.is_done)
|
|
except IntegrityError as error:
|
|
print(error)
|
|
|
|
try:
|
|
Profile.create(
|
|
user= User.get(1),
|
|
bio = 'Developpeur',
|
|
avatar= 'http://example.com'
|
|
)
|
|
except IntegrityError as error:
|
|
print(error)
|
|
|
|
try:
|
|
tag_urgent = Tag.create(name= "Urgent")
|
|
tag_perso = Tag.create(name= "Perso")
|
|
tag_pro = Tag.create(name= "Pro")
|
|
|
|
todo_cobol = Todo.get(Todo.title == "Apprendre COBOL")
|
|
|
|
TodoTag.create(todo= todo_cobol, tag= tag_urgent)
|
|
except IntegrityError as error:
|
|
print(error) |