Beispiel #1
0
class Quantity(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    quantity = db.Column(db.Float)

    recipe_id = db.Column(db.Integer,
                          db.ForeignKey('recipe.id', ondelete="CASCADE"),
                          nullable=False)
    recipe = db.relationship('Recipe',
                             backref=db.backref('quantities',
                                                cascade="all,delete",
                                                lazy=True))

    ingredient_id = db.Column(db.Integer,
                              db.ForeignKey('ingredient.id'),
                              nullable=False)
    ingredient = db.relationship('Ingredient',
                                 backref=db.backref('quantities', lazy=True))

    measurement_id = db.Column(db.Integer,
                               db.ForeignKey('measurement.id'),
                               nullable=False)
    measurement = db.relationship('Measurement',
                                  backref=db.backref('quantities', lazy=True))

    def __init__(self, quantity, recipe, ingredient, measurement):
        self.quantity = quantity
        self.recipe = recipe
        self.ingredient = ingredient
        self.measurement = measurement

    def __repr__(self):
        return '<Quantity %r>' % self.quantity
Beispiel #2
0
class House(db.Model):
    __tablename__ = 'house'
    houseID = db.Column(db.String(20), primary_key=True)
    housetitle = db.Column(db.String(40), nullable=False)
    city = db.Column(db.String(10), nullable=False)
    district = db.Column(db.String(10), nullable=False)
    area = db.Column(db.String(50), nullable=False)
    street = db.Column(db.String(50), nullable=False)
    community = db.Column(db.String(50), nullable=False)
    room = db.Column(db.String(10), nullable=False)
    lng = db.Column(db.String(30), nullable=False)
    lat = db.Column(db.String(30), nullable=False)
    housepic = db.Column(db.String(200), nullable=False)
    housearea = db.Column(db.Float, nullable=False)
    housedirect = db.Column(db.String(5), nullable=False)
    housefloor = db.Column(db.String(5), nullable=False)
    househall = db.Column(db.String(10), nullable=False)
    balcony = db.Column(db.Boolean, nullable=False)
    bathroom = db.Column(db.Boolean, nullable=False)
    housestatus = db.Column(db.Boolean, nullable=False)
    housetype = db.Column(db.String(5), nullable=False)
    housearound = db.Column(db.Text)
    # 外码
    tenanttel = db.Column(db.String(11), db.ForeignKey('user.usertel'))
    # relationship
    tenant = db.relationship('User', backref=db.backref('renthouse'))
    pics = db.relationship('Housepic', backref=db.backref('house'))
    prices = db.relationship('Payment', backref=db.backref('house'))
Beispiel #3
0
class Artist(db.Model):
    __tablename__ = 'Artist'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False, unique=True)
    city_id = db.Column(db.Integer, db.ForeignKey('City.id'), nullable=False)
    phone = db.Column(db.String(120), nullable=True)
    image_link = db.Column(db.String(500), nullable=True)
    facebook_link = db.Column(db.String(120), nullable=True)
    website = db.Column(db.String(120), nullable=True)
    seeking_venue = db.Column(db.Boolean, nullable=True)
    seeking_description = db.Column(db.String, nullable=True)
    genres = db.relationship('Genre', secondary=artist_genres,
      backref=db.backref('artists', lazy=True))
    regitration_time = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    @aggregated('upcoming_shows', db.Column(db.Integer))
    def num_upcoming_shows(self):
        return db.func.count(Show.id)
    upcoming_shows = db.relationship('Show', 
      primaryjoin='and_(Artist.id == Show.artist_id, cast(Show.start_time, Date) >= func.current_date())',
      order_by='Show.start_time')
    @aggregated('past_shows', db.Column(db.Integer))
    def num_past_shows(self):
        return db.func.count(Show.id)
    past_shows = db.relationship('Show', 
      primaryjoin='and_(Artist.id == Show.artist_id, cast(Show.start_time, Date) < func.current_date())',
      order_by='Show.start_time')
    shows = db.relationship('Show', cascade="delete", backref=db.backref('artist', lazy=True))
Beispiel #4
0
class Recipe(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True)
    user = db.relationship('User', backref=db.backref('recipes', lazy=True))

    recipe_name = db.Column(String(150), nullable=False, unique=True)
    recipe_description = db.Column(Text)
    preparation_time = db.Column(db.Integer)
    cooking_time = db.Column(db.Integer)
    servings = db.Column(db.Integer)

    category_id = db.Column(db.Integer,
                            db.ForeignKey('category.id'),
                            nullable=False)
    category = db.relationship('Category',
                               backref=db.backref('recipes', lazy=True))

    course_id = db.Column(db.Integer,
                          db.ForeignKey('course.id'),
                          nullable=False)
    course = db.relationship('Course',
                             backref=db.backref('recipes', lazy=True))

    cuisine_id = db.Column(db.Integer,
                           db.ForeignKey('cuisine.id'),
                           nullable=False)
    cuisine = db.relationship('Cuisine',
                              backref=db.backref('recipes', lazy=True))

    author_id = db.Column(db.Integer,
                          db.ForeignKey('author.id'),
                          nullable=False)
    author = db.relationship('Author',
                             backref=db.backref('recipes', lazy=True))

    image_filename = db.Column(db.String, default=None, nullable=True)
    image_url = db.Column(db.String, default=None, nullable=True)

    def __init__(self, user, recipe_name, recipe_description, preparation_time,
                 cooking_time, servings, category, course, cuisine, author,
                 image_filename, image_url):
        self.user = user
        self.recipe_name = recipe_name
        self.recipe_description = recipe_description
        self.preparation_time = preparation_time
        self.cooking_time = cooking_time
        self.servings = servings
        self.category = category
        self.course = course
        self.cuisine = cuisine
        self.author = author
        self.image_filename = image_filename
        self.image_url = image_url

    def __repr__(self):
        return '<Recipe %r>' % self.recipe_name
Beispiel #5
0
class Comment(db.Model):
    __tablename__ = 'comment'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)      ##评论ID
    content = db.Column(db.Text,nullable=False)                         ##评论内容
    itemid = db.Column(db.Integer,db.ForeignKey('item.id'))             ##评论物品的ID
    ownerid = db.Column(db.Integer,db.ForeignKey('user.id'))            ##评论发布者ID
    create_time = db.Column(db.DateTime,default=datetime.now)           ##评论发布时间

    item = db.relationship('Item',backref=db.backref('comments',order_by=id.desc()))       ##评论物品
    owner = db.relationship('User',backref=db.backref('comments'))      ##评论发布者
Beispiel #6
0
class User(db.Model):
    __tablename__ = 'user'
    usertel = db.Column(db.String(11), primary_key=True)
    username = db.Column(db.String(20), nullable=False)
    userpsw = db.Column(db.String(10), nullable=False)
    usersex = db.Column(db.Boolean, nullable=False)
    useremail = db.Column(db.String(30))
    useravatar = db.Column(db.String(100))
    userjob = db.Column(db.String(20))
    # relationship
    userrecord = db.relationship('Userrecord', backref=db.backref("user"))
    rentrecord = db.relationship('Rentrecord', backref=db.backref("user"))
Beispiel #7
0
class Team(db.Model, IdModel):

    __tablename__ = 'team'

    name = Column(String, unique=True)

    users = db.relationship('User', backref=db.backref('team'))
Beispiel #8
0
class Colonne(db.Model):
    numCol = db.Column(db.Integer, primary_key=True)
    graphId = db.Column(db.Integer, db.ForeignKey('graphique.graphId'))
    graphique = db.relationship("Graphique",
                                backref=db.backref("colonnes", lazy="dynamic"))
    colName = db.Column(db.String(255))
    dateDebut = db.Column(db.Date())
    dateFin = db.Column(db.Date())
    agregatSimple = db.Column(db.String(255))
    capteur_id = db.Column(db.Integer, db.ForeignKey('capteur.captId'))
    capteur = db.relationship("Capteur")

    def __repr__(self):
        return "<Colonne (%d) (%s) >" % (self.numCol, self.colName)

    @property
    def aggreger(self):
        return agregats.get(self.agregatSimple, lambda x: 0)

    @property
    def valeurs(self):
        valeurs = [m.valeur for m in self.capteur.mesures.all()]
        if not self.agregatSimple:
            return valeurs
        else:
            v = self.aggreger(valeurs)
            return [v for _ in range(len(self.capteur.mesures.all()))]

    @property
    def valeurs_datees(self):
        return list(zip(self.dates, self.valeurs))

    @property
    def dates(self):
        return [m.date for m in self.capteur.mesures.all()]
Beispiel #9
0
class MonsterCard(Card):
	__tablename__ = 'monsters'

	attack = db.Column(db.String(4))
	defense = db.Column(db.String(4))
	stars = db.Column(db.Integer)
	attribute = db.Column(db.Enum('dark', 'divine', 'earth', 'fire', 'light', 'water', 'wind', name='attribute'))
	species = db.Column(db.Enum('aqua', 'beast', 'beast-warrior', 'creator god', 'cyberse', 'dinosaur', 'divine-beast', 'dragon', 'fairy', 'fiend', 'fish', 'insect', 'machine', 'plant', 'psychic', 'pyro', 'reptile', 'rock', 'sea serpent', 'spellcaster', 'thunder', 'warrior', 'winged beast', 'wyrm', 'zombie'))

	types = db.relationship('MonsterType', secondary=monsterstypes, backref=db.backref('monsters', lazy='dynamic'))

	__mapper_args__ = {'polymorphic_identity': 'monster'}

	def __init__ (self, codepass, name, text, image, thumbnail, illegal, has_name_condition, attack, defense, stars, attribute, species):
		self.codepass = codepass
		self.name = name
		self.text = text
		self.image = image
		self.thumbnail = thumbnail
		self.illegal = illegal
		self.has_name_condition = has_name_condition
		self.attack = attack
		self.defense = defense
		self.stars = stars
		self.attribute = attribute
		self.species = species
Beispiel #10
0
class Capteur(db.Model):

    captId = db.Column(db.Integer, primary_key=True)
    cName = db.Column(db.String(100))
    cTel = db.Column(db.String(20))
    cType = db.Column(db.String(100))
    frequence = db.Column(db.Float(5, 2))
    formule = db.Column(db.String(255))
    owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)
    owner = db.relationship('User',
                            backref=db.backref('capteurs', lazy='dynamic'))

    # méthode d'affichage
    def __repr__(self):
        return "<Capteur (%d) %s>" % (self.captId, self.cName)

    @property
    def position(self):
        return self.positions.first()

    def serialize(self):
        return {
            'captId': self.captId,
            'cName': self.cName,
            'cTel': self.cTel,
            'cType': self.cType,
            'frequence': self.frequence,
            'formule': self.frequence,
            'pos_x': self.position.position_x,
            'pos_y': self.position.position_y,
        }
Beispiel #11
0
class Pin(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    source = db.Column(db.String(255), nullable=False)
    code = db.Column(db.String(255), nullable=False)
    # 所在的机器
    address = db.Column(db.String(255))
    create_time = db.Column(db.DateTime, nullable=False, default=datetime.datetime.now)
    expire_time = db.Column(db.DateTime)
    remain_try_times = db.Column(db.Integer)

    user = db.relationship('User', backref=db.backref('pins', order_by=db.desc(create_time)))

    __table_args__ = (
        UniqueConstraint('user_id', 'source', name='_user_source'),
    )

    @classmethod
    def create_code(cls, length):
        """
        创建code
        :return:
        """

        chars = '0123456789'
        return ''.join([random.choice(chars) for i in xrange(length)])

    def __unicode__(self):
        return u'<%s %s-%s-%s>' % (type(self).__name__, self.user_id, self.source, self.code)
Beispiel #12
0
class Kindness(db.Model):
    __tablename__ = "Kindness"

    id_kindness = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(50))
    identifier = db.Column(db.String(40), unique=True, nullable=False)
    body = db.Column(db.Text, nullable=False)
    latitude = db.Column(db.Float, nullable=False)
    longitude = db.Column(db.Float, nullable=False)
    post_date = db.Column(db.DateTime, default=datetime.datetime.now)
    user_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=False)
    unnamed = db.Column(db.Boolean, default=False)
    likes = db.relationship('Likes', backref='likes', lazy='dynamic')
    files = db.relationship('Kindness_Files', backref='file', lazy=True)
    tags = db.relationship('Tags',
                           secondary=kindness_tags_association,
                           lazy='subquery',
                           backref=db.backref('kindness', lazy=True))

    def __repr__(self):
        return '<Kindness {}>'.format(self.title)

    def to_json(self):
        return {
            "idPost": self.identifier,
            "title": self.title,
            "body": self.body,
            "latitude": self.latitude,
            "longitude": self.longitude,
            "postDate": self.post_date,
            "userId": self.user_id
        }
Beispiel #13
0
class SavedRecipe(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    user = db.relationship('User',
                           backref=db.backref('savedrecipes', lazy=True))

    recipe_id = db.Column(db.Integer,
                          db.ForeignKey('recipe.id', ondelete="CASCADE"),
                          nullable=False)
    recipe = db.relationship('Recipe',
                             backref=db.backref('savedrecipes', lazy=True))

    UniqueConstraint('user_id', 'recipe_id', name='savedrecipe_user_recipe_uc')

    def __init__(self, user, recipe):
        self.user = user
        self.recipe = recipe
Beispiel #14
0
class Readability(db.Model):
    __tablename__ = 'readability'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    # foreignKey link with table 'user'
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    url_add = db.Column(db.String(500), nullable=False)
    readability_rate = db.Column(db.Integer, nullable=False)
    # relation link with Class 'User'
    user = db.relationship('User', backref=db.backref('readability'))
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    roles = db.relationship(
        'Role',
        secondary=roles_users,
        backref=db.backref('users', lazy='dynamic'))
Beispiel #16
0
class Organism(db.Model, IdModel):

    __tablename__ = 'organism'

    common_name = Column(String, nullable=False)
    latin_name = Column(String)
    embl_name = Column(String)

    reference_genomes = db.relationship('ReferenceGenome',
                                        backref=db.backref('organism'))
Beispiel #17
0
class Graphique(db.Model):
    graphId = db.Column(db.Integer, primary_key=True)
    uId = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship("User",
                           backref=db.backref("graphiques", lazy="dynamic"))
    titre = db.Column(db.String(255))

    def __repr__(self):
        return "<Graphique (%d) (%d) (%s) >" % (self.graphId, self.uId,
                                                self.titre)
Beispiel #18
0
class Tasks(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    teams_id = db.Column(db.ForeignKey("teams.id"), nullable=False)
    team = db.relationship("Teams",
                           foreign_keys=[teams_id],
                           backref=db.backref("Tasks"))
    name = db.Column(db.String(124), unique=False, nullable=False)
    items = db.Column(db.String(512), unique=False, nullable=True)

    def __repr__(self):
        return '<Task %r>' % self.name
Beispiel #19
0
class DataSet(db.Model, IdModel):

    __tablename__ = 'dataset'

    location = Column(String)
    filetype = Column(String)

    experiment_id = Column(Integer, ForeignKey('experiment.id'))
    tool_id = Column(Integer, ForeignKey('tool.id'))

    files = db.relationship('DataFile', backref=db.backref('dataset'))
Beispiel #20
0
class Item(db.Model):

    __tablename__ = 'item'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)      ##物品ID
    name = db.Column(db.String(30),nullable=False)                      ##物品名称
    description = db.Column(db.Text,nullable=True)                      ##物品详细描述
    price = db.Column(db.Float,nullable=False)                          ##物品价格
    imgpath = db.Column(db.String(300),nullable=True)                    ##物品图片url
    ownerid = db.Column(db.Integer,db.ForeignKey('user.id'))            ##物品发布者id
    owner = db.relationship('User',backref=db.backref('items'))         ##物品发布者
    create_time = db.Column(db.DateTime,default=datetime.now)           ##物品发布时间
    isclosed = db.Column(db.Integer,nullable=False,default=0)           ##物品交易是否被关闭,1为关闭
Beispiel #21
0
class Buy(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    user = db.relationship('User', backref=db.backref('users', lazy=True))

    product_id = db.Column(db.Integer,
                           db.ForeignKey('product.id'),
                           nullable=False)
    product = db.relationship('Product',
                              backref=db.backref('products', lazy=True))

    n_items = db.Column(db.Integer, nullable=False)

    def __init__(self, user, product, n_items):
        self.user = user
        self.product = product
        self.n_items = n_items

    def __repr__(self):
        return "<Buy %r:%r>" % (self.user, self.product)
Beispiel #22
0
class Comment(db.Model):
    __tablename__ = 'comment'
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(500), nullable=False)
    # created = db.Column(db.DateTime(timezone=True), nullable=False)
    # modified = db.Column(db.DateTime(timezone=True), nullable=False)
    created = db.Column(ArrowType, nullable=False)
    modified = db.Column(ArrowType, nullable=False)
    # http://docs.sqlalchemy.org/en/rel_1_0/orm/basic_relationships.html
    thread_id = db.Column(db.Integer,
                          db.ForeignKey('thread.id'),
                          nullable=False)
    author_id = db.Column(db.Integer,
                          db.ForeignKey('author.id'),
                          nullable=False)
    likes = db.Column(db.Integer, default=0)
    dislikes = db.Column(db.Integer, default=0)
    parent_id = db.Column(db.Integer,
                          db.ForeignKey('comment.id'),
                          nullable=True)
    children = db.relationship('Comment',
                               backref=db.backref('parent', remote_side=[id]))
    hidden = db.Column(db.Boolean(), default=False)

    def set_vote(self, author_id, like):
        vote = db.session.query(Vote).filter_by(comment_id=self.id,
                                                author_id=author_id).first()

        if vote:
            if vote.like == like:
                # Vote exists and is the same
                return True
            else:
                # Vote exists but changed
                vote.like = like
                if like:
                    # changed to a like
                    self.likes += 1
                    self.dislikes -= 1
                else:
                    # changed to a dislike
                    self.likes -= 1
                    self.dislikes += 1
        else:
            # New vote
            vote = Vote(comment_id=self.id, author_id=author_id, like=like)
            db.session.add(vote)
            if like:
                self.likes += 1
            else:
                self.dislikes += 1
        db.session.commit()
Beispiel #23
0
class Measurement(db.Model):
  __tablename__ = 'measurements'

  id = db.Column(db.Integer, primary_key=True)
  time = db.Column(db.DateTime, nullable=True)
  heart_rate = db.Column(db.Integer)

  gram_id = db.Column(db.Integer, db.ForeignKey('gram.id'), nullable=False)
  gram = db.relationship('Gram', backref=db.backref('measurements', lazy=True))

  @staticmethod
  def get_all_measurements():
    return Measurement.query.all()
Beispiel #24
0
class User(db.Model, UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer(), primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    roles = db.relationship('Role',
                            secondary=UsersRoles,
                            backref=db.backref('users', lazy='dynamic'))

    def __str__(self):
        return self.email
Beispiel #25
0
class Mesure(db.Model):

    capt_id = db.Column(db.Integer,
                        db.ForeignKey('capteur.captId'),
                        primary_key=True)
    capteur = db.relationship('Capteur',
                              backref=db.backref('mesures', lazy='dynamic'))
    date = db.Column(db.DateTime,
                     index=True,
                     primary_key=True,
                     server_default=db.func.now(),
                     default=datetime.datetime.utcnow)
    valeur = db.Column(db.Float)
Beispiel #26
0
class Profile(db.Model):
    def __init__(self, name, address, phone):
        self.name = name
        self.address = address
        self.phone = phone

    id = db.Column(db.String(), primary_key=True, default=str(uuid.uuid4()))
    name = db.Column(db.String())
    address = db.Column(db.String())
    phone = db.Column(db.String())
    user_id = db.Column(db.String(), db.ForeignKey('user.id'))
    user = db.relationship('User',
                           backref=db.backref('profile', uselist=False))
Beispiel #27
0
class Geolocalisation(db.Model):

    position_x = db.Column(db.Float)
    position_y = db.Column(db.Float)
    capt_id = db.Column(db.Integer,
                        db.ForeignKey('capteur.captId'),
                        primary_key=True)
    capteur = db.relationship('Capteur',
                              backref=db.backref('positions', lazy='dynamic'))
    date = db.Column(db.DateTime,
                     primary_key=True,
                     index=True,
                     server_default=db.func.now(),
                     default=datetime.datetime.utcnow)
Beispiel #28
0
class Blogpost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    parentId = db.Column(db.Integer, default=-1)
    title = db.Column(db.String(100))
    text = db.Column(db.Text())
    date = db.Column(db.DateTime())
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    replies = db.relationship('Blogpost',
                              secondary=replies,
                              primaryjoin='Blogpost.id==replies.c.original_id',
                              secondaryjoin='Blogpost.id==replies.c.reply_id',
                              backref=db.backref('posts', lazy='dynamic'),
                              lazy='dynamic')

    def __init__(self, user_id, text, date, title=''):
        self.user_id = user_id
        self.title = title
        self.text = text
        self.date = date

    def set_parentId(self, pid):
        self.parentId = pid

    def __repr__(self):
        return '<Blogpost - {}>'.format(self.title)

    def serialize(self):
        if self.user_id != None:
            user = User.query.get(self.user_id)
            delta = datetime.datetime.now() - self.date
            diff = ''
            if delta.days > 0:
                diff = str(int(delta.days)) + ' day(s) ago'
            else:
                diff_time = delta.seconds
                if diff_time < 60:
                    diff = str(int(delta.seconds)) + ' second(s) ago'
                elif diff_time < 3600:
                    diff = str(int(delta.seconds / 60)) + ' minute(s) ago'
                else:
                    diff = str(int(delta.seconds / 3600)) + ' second(s) ago'
            return {
                'id': self.id,
                'username': user.username,
                'fname': user.first_name,
                'title': self.title,
                'text': self.text,
                'date': diff,
                'parentId': self.parentId
            }
Beispiel #29
0
class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.String(5000), nullable=False)
    url_add = db.Column(db.String(500), nullable=False)
    date_tweeter = db.Column(db.String(100), nullable=False)
    tf_idf = db.Column(db.String(100), nullable=False)
    key_words = db.Column(db.String(100), nullable=False)
    # new_feature1 = db.Column(db.Integer,nullable=True)
    #foreignKey link with table 'user'
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    #relation link with Class 'User'
    user = db.relationship('User', backref=db.backref('articles'))
Beispiel #30
0
class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    author_name = db.Column(String(150), nullable=False, unique=True)
    country_id = db.Column(db.Integer,
                           db.ForeignKey('country.id'),
                           nullable=False)
    country = db.relationship('Country',
                              backref=db.backref('authors', lazy=True))

    def __init__(self, author_name):
        self.author_name = author_name

    def __repr__(self):
        return '<Author %r>' % self.author_name