Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save giasuddin90/b0ba245bdbd4adcd063ab89aa6d788ae to your computer and use it in GitHub Desktop.
Save giasuddin90/b0ba245bdbd4adcd063ab89aa6d788ae to your computer and use it in GitHub Desktop.
Sqlalchemy foreignkey and many to many field joining
# pre rehnquist:
# >psycopg2
# >python version 3.*
#> SQLAlchemy
#
# Outcome:
# >using Sqlalchemy create table and call data from database
# >Table sync in postgresql
from sqlalchemy import (
Table,
Column,
Index,
Integer,
Text,
String,
DateTime,
Date,
ForeignKey,
create_engine,
desc,
asc,
Boolean,
and_
)
from sqlalchemy.orm import load_only
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.engine.url import URL
import datetime
from sqlalchemy.orm import sessionmaker
DeclarativeBase = declarative_base()
DATABASE = {
'drivername': 'postgres',
'host': '127.0.0.1',
'port': '5432',
'username': 'admin',
'password': '789',
'database': 'tesdb'
}
def db_connect():
"""
Performs database connection using database settings from settings.py.
Returns sqlalchemy engine instance
"""
return create_engine(URL(**DATABASE))
def create_deals_table(engine):
""""""
DeclarativeBase.metadata.create_all(engine)
def db_session():
engine = db_connect()
Session = sessionmaker(bind=engine)
session = Session()
return session
DBSession = db_session()
tags = Table('tag_task', DeclarativeBase.metadata,
Column('task_id', Integer, ForeignKey('task.id')),
Column('tag_id', Integer, ForeignKey('tags.id'))
)
class Task(DeclarativeBase):
__tablename__ = 'task'
id = Column(Integer, primary_key=True)
task_project_type = Column(Text)
task_title = Column(Text)
task_detail = Column(Text)
task_created_by = Column(Text)
task_updated_by = Column(Text)
task_assign_to = Column(Text)
task_created_on = Column(DateTime, default=datetime.datetime.now())
task_updated_on = Column(DateTime)
task_deadline = Column(Date)
task_tags_list = Column(Text)
task_status = Column(Boolean, default=False)
task_tags = relationship('Tag', secondary=tags, backref = backref('task', lazy='dynamic'))
comments = relationship('Comment', backref='task', lazy='dynamic')
class Tag(DeclarativeBase):
__tablename__ = 'tags'
id = Column(Integer, primary_key=True)
name = Column(Text, unique=True, nullable=False)
class Comment(DeclarativeBase):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
comment_description = Column(Text)
comment_created_by = Column(Text)
comment_created_on = Column(DateTime, default=datetime.datetime.now())
comment_updated_on = Column(DateTime)
task_id = Column(Integer, ForeignKey('task.id'))
if __name__ == '__main__':
engine = db_connect()
create_deals_table(engine)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment