В sqlite я использую следующее, чтобы создать и подать в таблицу 'my_nutrition_results'
c.execute('''CREATE TABLE my_nutrition_results
(date, item, qnt, var1, var2, var3)''')
sql = """INSERT INTO my_nutrition_results
( date, item, qnt, var1, var2, var3)
SELECT
t.date, t.item, t.qnt,
s.var1 * t.qnt, s.var2 * t.qnt, s.var3 * t.qnt
FROM eat_log t
INNER JOIN nutritional_values s
ON t.item = s.item;"""
c.execute(sql)
как мне сделать это ВНУТРЕННЕЕ СОЕДИНЕНИЕ в sqlalchemy, мой код sqlalchemy
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, FLOAT, DATE, ForeignKey
from sqlalchemy.orm import scoped_session, sessionmaker, relationship
import datetime as dt
engine = create_engine('sqlite:///test2.db', echo=True)
Session = sessionmaker(bind=engine)
Base = declarative_base()
class Nutritional_Values(Base):
__tablename__ = 'nutritional_values'
id = Column(Integer, primary_key=True)
item = Column(String)
var1 = Column(FLOAT)
var2 = Column(FLOAT)
var3 = Column(FLOAT)
def __repr__(self):
return "<Nutrional Value(item='%s', var1='%s', var2='%s' var3='%s')>" % (
self.item, self.var1, self.var2, self.var3)
Base.metadata.create_all(engine)
class Eat_Log(Base):
__tablename__ = 'eat_log'
id = Column(Integer, primary_key=True)
date = Column(DATE)
item = Column(String)
qnt = Column(FLOAT)
nutritional_value_id = Column(Integer,
ForeignKey('nutritional_values.id'),
nullable=False)
# Relationships
item_nutritional_value = relationship("Nutritional_Values")
def __repr__(self):
return "<Eat log(date='%s', item='%s', quantity='%s')>" % (
self.date, self.item, self.qnt)
Base.metadata.create_all(engine)
class My_Nutrition_Results(Base):
__tablename__ = 'my_nutrition_results'
id = Column(Integer, primary_key=True)
date = Column(DATE)
item = Column(String)
qnt = Column(FLOAT)
var1 = Column(FLOAT)
var2 = Column(FLOAT)
var3 = Column(FLOAT)
nutritional_value_id = Column(Integer,
ForeignKey('nutritional_values.id'),
nullable=False)
# Relationships
item_nutritional_value = relationship("Nutritional_Values")
def __repr__(self):
return "<Nutrition Result(date='%s', item='%s', quantity='%s', var1='%s', var2='%s' var3='%s')>" % (
self.date, self.item, self.qnt, self.var1, self.var2, self.var3)
Base.metadata.create_all(engine)
s = Session()
objects = [
Nutritional_Values(item="item1", var1=3, var2=4, var3=2),
Nutritional_Values(item="item2", var1=4, var2=2, var3=8),
Eat_Log(date=dt.date(2019, 9, 7), item="item1", qnt=2.0, nutritional_value_id=1 ),
Eat_Log(date=dt.date(2019, 9, 7), item="item2", qnt=0.1, nutritional_value_id=2 ),
Eat_Log(date=dt.date(2019, 9, 8), item="item1", qnt=3.0, nutritional_value_id=1 )
]
s.bulk_save_objects(objects)
s.commit()
из другого вопроса похоже, что мне нужно что-то вроде
s.query(Nutritional_Values.id, Eat_Log.id))
.join(Eat_Log, Nutritional_Values.id == Eat_Log.nutritional_value_id)
но верно? и как мне сделать умножение между «QNT» и «VAR»? и как мне 'INSERT INTO' my_nutrition_results?