Python SQLAlchemy: помогите описать таблицы
В комментариях к моделям написано, что за связи требуется сделать
P.s. Я хочу увидеть решение, чтобы при его анализе я понял, как оно работает, потому что мне ничего не понятно из документации (Во всяком случае, к сожалению, я не знаю базу данных, но мне срочно нужно разобраться в проблеме )
class Product(Base):
"""
id -- primary int key
name -- string column with max 64 chars
article -- unique shop article int column
items -- relation to ReceiptItems
"""
__tablename__ = 'product'
id = ...
name = ...
article = ...
items = ...
class ReceiptItem(Base):
"""
Corresponds to a line in a receipt
id -- primary key int column
receipt_id -- receipt foreign key column
receipt -- relation to Receipt
product_id -- product foreign key column
product -- relation to Product
quantity -- quantity of sold product in ReceiptItem
price -- price of sold product in ReceiptItem
Constraints:
- Receipt MUST NOT contain two ReceiptItems for same product
"""
__tablename__ = 'receipt_item'
id = ...
receipt_id = ...
receipt = ...
product_id = ...
product = ...
quantity = ...
price = ...
class Receipt(Base):
"""
id -- primary key int column
completed_at -- datetime column
items -- relation to ReceiptItems
"""
__tablename__ = 'receipt'
id = ...
completed_at = ...
items = ...
Ответы (1 шт):
Автор решения: Алексей Белкин
→ Ссылка
Примерную структуру накидал. Остальные связи сами настроите:
MyApp = Flask(__name__)
MyApp.config['SQLALCHEMY_DATABASE_URI'] = 'ИМЯ_СУБД://ИМЯ_ПОЛЬЗОВАТЕЛЯ:ПАРОЛЬ_БД$$@IP_АДРЕС_СЕРВЕРА:ПОРТ/ИМЯ_БД'
MyApp.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(MyApp)
db.init_app(MyApp)
class ReceiptItem(db.Model):
__tablename__ = 'receipt_item'
id = db.Column(db.Integer, primary_key=True)
receipt_id = ...
receipt = db.Column(db.Integer, db.ForeignKey('receipt.id'))
product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
product = ...
quantity = ...
price = ...
class Product(db.Model):
__tablename__ = 'product'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text, unique=False, nullable=False)
article = db.Column(db.Text, unique=False, nullable=False)
items = db.Column(db.Integer, db.ForeignKey('receipt_item.id'))
def __repr__(self):
return f"{self.id},{self.name},{self.article},{self.items}"
class Receipt(db.Model):
"""
id -- primary key int column
completed_at -- datetime column
items -- relation to ReceiptItems
"""
__tablename__ = 'receipt'
id = ...
completed_at = ...
items = ...
db.create_all()