Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Sqlalchemy中,我可以添加一个带有“的列吗?”;源表“;联合会的名字?_Python_Sql_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 在Sqlalchemy中,我可以添加一个带有“的列吗?”;源表“;联合会的名字?

Python 在Sqlalchemy中,我可以添加一个带有“的列吗?”;源表“;联合会的名字?,python,sql,flask,sqlalchemy,flask-sqlalchemy,Python,Sql,Flask,Sqlalchemy,Flask Sqlalchemy,我有这两张桌子——销售和采购。然后是与他们相关的“股票”。顺便说一下,这是炼金术,但我不知道这是否重要 class Sales(db.Model): __tablename__ = "sales" id = db.Column(db.Integer, primary_key=True) stock_id = db.Column(db.Integer, db.ForeignKey( 'stocks.id'), nullable=False) user

我有这两张桌子——销售和采购。然后是与他们相关的“股票”。顺便说一下,这是炼金术,但我不知道这是否重要

class Sales(db.Model):
    __tablename__ = "sales"
    id = db.Column(db.Integer, primary_key=True)
    stock_id = db.Column(db.Integer, db.ForeignKey(
        'stocks.id'), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    amount = db.Column(db.Integer, nullable=False, default=1)
    unit_price = db.Column(db.Numeric, nullable=False)
    total_price = db.Column(db.Numeric, nullable=False)
    time = db.Column(db.DateTime, nullable=False,
                     default=datetime.datetime.utcnow())


class Purchases(db.Model):
    __tablename__ = "purchases"
    id = db.Column(db.Integer, primary_key=True)
    stock_id = db.Column(db.Integer, db.ForeignKey(
        'stocks.id'), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    amount = db.Column(db.Integer, nullable=False, default=1)
    unit_price = db.Column(db.Numeric, nullable=False)
    total_price = db.Column(db.Numeric, nullable=False)
    time = db.Column(db.DateTime, nullable=False,
                     default=datetime.datetime.utcnow())

class Stock(db.Model):
    __tablename__ = "stocks"
    id = db.Column(db.Integer, primary_key=True)
    symbol = db.Column(db.String(), nullable=False, unique=True)
    name = db.Column(db.String, nullable=False)
我需要对整个交易做一个概述(然后将其与Stock表连接起来,以便能够看到正在出售/购买的产品的名称)

这两张桌子是一样的。唯一的区别是一个是销售,一个是购买。我需要在查询产生的数据中明确这一点——哪些行来自“销售”,哪些行来自“采购”

  • 用一个表代替所有事务和一个列来指定从一开始是销售还是购买会更明智吗?还是用正数和负数表示“价格总额”

  • 我可以将两个表合并,但也可以指定哪些行来自哪个表吗?比如添加一个额外的列,如果是销售,则内容为“0”,如果是购买,则内容为“1”

  • 如果有人向我展示一些示例查询,包括如何使连接也包含来自stock表的“stock symbol”或“stock name”,我将非常感激


  • 您可以将
    标签
    功能与
    文本
    功能结合使用来创建“源”列

    from sqlalchemy.sql import text
    
    q1 = db.session.\
        query(
            text("Purchases").label("SourceTable"),
            Purchases.stock_id.label("PurchaseStockId")
            Stock.id.label("StockId")).\
        join(
            Purchases,
            Purchases.stock_id == Stock.id)
    
    q2= db.session.\
        query(
            text("Sales").label("SourceTable"),
            Sales.stock_id.label("SalesStockId"),
            Stock.id.label("StockId")).\
        join(
            Sales,
            Sales.stock_id == Stock.id)
    
    q3 = q1.union(q2).all()
    

    您可以将
    标签
    功能与
    文本
    功能结合使用来创建“源”列

    from sqlalchemy.sql import text
    
    q1 = db.session.\
        query(
            text("Purchases").label("SourceTable"),
            Purchases.stock_id.label("PurchaseStockId")
            Stock.id.label("StockId")).\
        join(
            Purchases,
            Purchases.stock_id == Stock.id)
    
    q2= db.session.\
        query(
            text("Sales").label("SourceTable"),
            Sales.stock_id.label("SalesStockId"),
            Stock.id.label("StockId")).\
        join(
            Sales,
            Sales.stock_id == Stock.id)
    
    q3 = q1.union(q2).all()
    

    但是,如果要把所有的东西都放在一行,那不是会把购买和销售混为一谈吗?我想到了union,因为我需要一个输出,其中销售和购买作为单独的行显示。相同ID的同一只股票可以在不同的时间点进行多次买卖。但是,如果要把所有股票都放在一行,这难道不会混淆买卖吗?我想到了union,因为我需要一个输出,其中销售和购买作为单独的行显示。相同ID的同一股票可以在不同时间点多次买卖。