首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ORM的烧瓶数据库设计

基于ORM的烧瓶数据库设计
EN

Code Review用户
提问于 2020-11-27 19:15:17
回答 1查看 106关注 0票数 3

我正在设计一个股票货币应用程序,并为此创建了一个数据库。我先搜索了我的问题,这里,但回答者让我在这里问同样的问题。

代码语言:javascript
复制
flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()


class Stock_Data(db.Model):
    __tablename__ = 'stock_datas'
    # Column names start with capital letter for convention to use data easier (for now)
    id = db.Column(db.Integer(), primary_key=True)
    Date = db.Column(db.DateTime, nullable=False)
    Open = db.Column(db.Float(), nullable=False)
    High = db.Column(db.Float(), nullable=False)
    Low = db.Column(db.Float(), nullable=False)
    Currency_Close = db.Column(db.Float(), nullable=False)
    Volume = db.Column(db.Integer(), nullable=False)

    # Foreign Key
    stock_id = db.Column(db.Integer, db.ForeignKey('stocks.id'))

    # Foreign Attribute To Reach
    stock = db.relationship('Stock', backref='Stock_Data', primaryjoin='Stock_Data.stock_id==Stock.id', lazy=True)


class Stock(db.Model):
    __tablename__ = 'stocks'
    id = db.Column(db.Integer(), primary_key=True)
    symbol = db.Column(db.String(10), unique=True)
    name = db.Column(db.String(50), unique=True)
    sector = db.Column(db.String(10), nullable=True)
    currency = db.Column(db.String(3), nullable=False)


class Parity_Data(db.Model):
    __tablename__ = 'parity_datas'
    id = db.Column(db.Integer(), primary_key=True)
    Parity_Close = db.Column(db.Float())
    Date = db.Column(db.DateTime, nullable=False)

    # Foreign Key
    parity_id = db.Column(db.Integer, db.ForeignKey('parities.id'))

    # Foreign Attribute To Reach
    parity = db.relationship('Parity', backref='Parity_Data', primaryjoin='Parity_Data.parity_id==Parity.id', lazy=True)


class Parity(db.Model):
    __tablename__ = 'parities'
    id = db.Column(db.Integer(), primary_key=True)
    parity_name = db.Column(db.String(8), unique=True)

我创建了这个数据库设计--所有的类都在单独的文件中。Sotck与Stock_Data (1-N)相关,奇偶度与Parity_Data (1-N)相关。

我正在建立股票和平价之间的联系

代码语言:javascript
复制
string_stock = 'APPL'
stock = session.query(Stock).filter(Stock.symbol == str(string_stock).upper()).first()
stock_data = session.query(Stock_Data).filter(Stock_Data.stock_id == stock.id).all()
parity = session.query(Parity).filter(Parity.parity_name.endswith(stock.currency)).first()
parity_data = session.query(Parity_Data).filter(Parity_Data.parity_id==parity.id).all()

通过这种方法,我可以分别获取所有的stock_data和parity_data。但是,当我试图合并stock_data和parity_data时,我会得到两个列表,因此不能合并。在那之后,我试过

代码语言:javascript
复制
data_joined_on_time = session.query(Stock_Data).join(Parity_Data, Stock_Data.Date == Parity_Data.Date).all()
dir(session.query(Stock_Data).join(Parity_Data, Stock_Data.Date == Parity_Data.Date).all()[0])  

这个方法连接数据,但是属性:电流_关闭,日期,高,低,打开,音量,class“,”delattr“,”dict“,”dir“,”doc“,”eq“,”format“,”ge“,”getattribute“,”gt“,”hash“,”init“,”init“,”le“,”lt“,”mapper“,”module“,”ne“,”new“,”reduce“,”reduce“,”repr“,”setattr“,”sizeof“,”str“,”subclasshook“,”table“,”tablename“,“弱引用”、“_德克_班级_登记处”、“_sa_班级_经理”、‘_sa_实例_状态’、id‘、’元数据‘,’查询‘,’查询‘_类,股票,股票_id’

没有任何关于Parity_Data的部分。

我的问题包括两部分:

  1. 我想不出另一种方法对我的数据库design.Is我的数据库设计不正确?
  2. 有办法将这两者(stock_data和parity_data)通过SQLAlchemy合并吗?我想先过滤和加入it.后,如果没有办法,我将合并他们的熊猫数据,但首先,我想尝试在SQLAlchemy上。
EN

回答 1

Code Review用户

回答已采纳

发布于 2021-05-27 20:47:08

最后,我用了熊猫。

代码语言:javascript
复制
df = pandas.read_sql_query("""My join query""")

这一切都解决了我的问题。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/252767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档