Code: Alles auswählen
class Countries(db.Model):
id = db.Column(db.Integer, primary_key=True)
name_de = db.Column(db.String(60), unique=True)
name_en = db.Column(db.String(60), unique=True)
name_fr = db.Column(db.String(60), unique=True)
Code: Alles auswählen
class Countries(db.Model):
id = db.Column(db.Integer, primary_key=True)
name_de = db.Column(db.String(60), unique=True)
name_en = db.Column(db.String(60), unique=True)
name_fr = db.Column(db.String(60), unique=True)
Code: Alles auswählen
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import join
from sqlalchemy.orm import column_property
import bpython
app = Flask(__name__)
db = SQLAlchemy(app)
class Country(db.Model):
id = db.Column(db.Integer, primary_key=True)
translations = db.relationship('CountryTranslation')
class CountryTranslation(db.Model):
__table_args__ = (
db.UniqueConstraint('country_id', 'lang'),
)
id = db.Column(db.Integer, primary_key=True)
country_id = db.Column(db.Integer, db.ForeignKey(Country.id))
lang = db.Column(db.String)
name = db.Column(db.String)
class CountryTranslated(db.Model):
__table__ = join(Country.__table__, CountryTranslation.__table__)
country_id = column_property(Country.id, CountryTranslation.country_id)
translation_id = column_property(CountryTranslation.id)
country = db.relationship(Country, uselist=False)
lang = column_property(CountryTranslation.lang)
name = column_property(CountryTranslation.name)
if __name__ == '__main__':
with app.app_context():
db.create_all()
bpython.embed(locals_=locals())
Code: Alles auswählen
>>> de_de = CountryTranslated(name='Deutschland', lang='de')
>>> db.session.add(de_de)
>>> db.session.commit()
>>> de_de.country.translations.append(CountryTranslation(name='Germany', lang='e
n'))
>>> db.session.commit()
>>> [(c.country_id, c.lang, c.name) for c in CountryTranslated.query.all()]
[(1, u'de', u'Deutschland'), (1, u'en', u'Germany')]
>>> Country.query.all()
[<__main__.Country object at 0x111c93d90>]
>>> CountryTranslation.query.all()
[<__main__.CountryTranslation object at 0x111c93b10>, <__main__.CountryTranslation object at 0x111c93b90>]
Hi Blackjack: Du willst also einen ISO-Code als Länderkürzel nehmen? Was würdest du denn an den zwei ersten Tabellen konkret ändern? Welche Felder hätte es noch? Und braucht es überhaupt eine 2. Tabelle, wenn man über Babel geht?ISO-Länderkürzel ändern sich eigentlich, da braucht man keine zusätzliche ID für. Wo die Unterschiede zwischen schweizer Französisch und französischem Französisch liegen weiss ich nicht, aber man sollte davon ausgehen das es welche gibt.