将SQLAlchemy表导入没有Flask的熊猫数据框

C.库尼

我正在创建一个服务器应用程序,它将使用Flask GUI创建的远程数据库。为了使事情简单(并且由于它主要是线程计算),我想在不利用Flask框架的情况下构建服务器应用程序。我将拥有一个Redis消息服务器,以使两个进程保持同步。

我的挑战是,我想尽可能使用永久性存储。因此,在此过程中,我的服务器应用程序将需要导入Flask-SQLAlchemy数据库文件以检索参数。我遇到的困难是编写将SQLAlchemy文件拉入熊猫的import语句。这是我到目前为止的内容:

config.py

import os


class Config:
    SQLALCHEMY_DATABASE_URI_REMOTE = os.environ.get('RDQ_LOGIN') # remote docker database
    SQLALCHEMY_DATABASE_URI_LOCAL = os.environ.get('RDU_LOGIN') # local file database
    REDIS_IP = os.environ.get('REDIS_IP')
    REDIS_PASSWORD = os.environ.get('REDIS_PASSWORD')

初始化.py

from src_code.config import Config
import redis
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import orm
from sqlalchemy.ext.declarative import declarative_base
import sqlalchemy as sa


engine_remote = create_engine(Config.SQLALCHEMY_DATABASE_URI_REMOTE, echo=True)
Base_remote = declarative_base()
Base_remote.metadata.create_all(engine_remote)
Session_remote = sessionmaker(bind=engine_remote)
Session_remote.configure(bind=engine_remote)
session_remote = Session_remote()

engine_local = create_engine(Config.SQLALCHEMY_DATABASE_URI_LOCAL, echo=True)
Base_local = declarative_base()
Base_local.metadata.create_all(engine_local)
Session_local = sessionmaker(bind=engine_local)
Session_local.configure(bind=engine_local)
session_local = Session_local()

redisChannel = redis.StrictRedis(host=Config.REDIS_IP, port=6379, password=Config.REDIS_PASSWORD,
                                 decode_responses=True)

main.py

import pandas as pd
from src_code import session_local, session_remote

def start():
    table_df = pd.read_sql(
        'SELECT * from game',
        con=session_remote
    )
    print(table_df)

if __name__ == "__main__":
    start()

不幸的是我遇到一个错误:

AttributeError: 'Session' object has no attribute 'cursor'

我不需要能够写回表(因此只读就足够了)。因此,我正在使用一个简单的示例,该示例将使我能够从熊猫中提取所需信息(我比使用SQL更自信地使用熊猫)。

我确实有可以在服务器代码中复制的模型语句,只要这可以以某种方式简化该过程:

from datetime import datetime
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from flask import current_app
from src_code import db, login_manager
from flask_login import UserMixin


@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))


class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    agent = db.Column(db.Integer, unique=False, nullable=False)
    image_file = db.Column(db.String(20), unique=False, nullable=False,default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)
    games_started = db.relationship('Game', backref='captained', lazy=True)
    games_played = db.relationship('Player', backref='games', lazy=True)

    def get_reset_token(self, expires_sec=1800):
        s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
        return s.dumps({'user_id': self.id}).decode('utf-8')

    @staticmethod
    def verify_reset_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            user_id = s.loads(token)['user_id']
        except:
            return None
        return User.query.get(user_id)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.agent}', '{self.image_file}')"


class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False,default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"


class Game(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(60), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    company_count = db.Column(db.Integer, nullable=False)
    starting_year = db.Column(db.Integer, nullable=False)
    time_limit = db.Column(db.Integer, nullable=False)
    agent_decisions_visible = db.Column(db.Boolean, nullable=False)
    client_count = db.Column(db.Integer, nullable=False)
    pre_game_yrs = db.Column(db.Integer, nullable=False)
    time_index = db.Column(db.Integer, nullable=False)
    game_active = db.Column(db.Boolean, nullable=False)
    player_capt = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    games_msgs = db.relationship('Messages', backref='messages', lazy=True)

    def __repr__(self):
        return f"Game('{self.title}', '{self.date_posted}')"


class GameRequests(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    date_requested = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"GameRequest('{self.game_id}', '{self.user_id}', '{self.date_requested}'"


class GameDecisions(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    date_requested = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    time_index = db.Column(db.Integer, nullable=False)


    def __repr__(self):
        return f"GameDecisions('{self.game_id}', '{self.user_id}', '{self.time_index}'"


class Player(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Player('{self.game_id}', '{self.user_id}', '{self.date_posted}'"


class Messages(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    date_posted = db.Column(db.DateTime, nullable=False,default=datetime.utcnow)
    type = db.Column(db.String(10), nullable=False)
    msg_from = db.Column(db.String(20), nullable=False)
    msg_to = db.Column(db.String(20), nullable=False)
    message = db.Column(db.String(60), nullable=False)
    game_id = db.Column(db.Integer, db.ForeignKey('game.id'), nullable=False)

    def __repr__(self):
        return f"Messages('{self.game_id}', '{self.id}', '{self.message}', '{self.date_posted}')"

谢谢你尽你所能的帮助!

雅科夫·布雷斯勒

与您的结论类似,这是我将数据库读入熊猫的方式:

# Create your query.
# This can be as complex or simple as you'd like
query = session_remote.query(Game)

df = pd.read_sql(query.statement, session_remote.bind)

此处的主要区别是利用ORM来执行(或写)查询本身。

在ORM后面屏蔽SQL有很多优点-我强烈建议不要在生产后端中使用原始SQL。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将“ .dat”文件导入熊猫数据框

来自分类Dev

RPostgreSQL-将数据框导入表

来自分类Dev

熊猫数据框没有绘图功能

来自分类Dev

熊猫没有追加数据框

来自分类Dev

有没有办法将npz文件转换为熊猫数据框?

来自分类Dev

有没有办法将熊猫数据框打印为可复制代码?

来自分类Dev

无法安装flask_sqlalchemy->导入错误:没有名为flask_sqlalchemy的模块

来自分类Dev

如何将R数据框导入熊猫?

来自分类Dev

以列表作为列将CSV导入熊猫数据框

来自分类Dev

如果在熊猫数据框中没有,Multindex将添加零值

来自分类Dev

熊猫没有将数据框的某些列转换为datetimeindex

来自分类Dev

Flask-SQLAlchemy:没有链接这些表的外键

来自分类Dev

OperationalError在Flask中没有这样的表与SQLAlchemy

来自分类Dev

熊猫:将数据透视表打印到数据框

来自分类Dev

有没有办法遍历熊猫数据框?

来自分类Dev

将数据框导出/导入为Excel工作表

来自分类Dev

熊猫数据框到没有索引的JSON

来自分类Dev

从熊猫数据框中提取子集,确保没有重叠?

来自分类Dev

为什么“空行”没有被删除(熊猫数据框)?

来自分类Dev

熊猫数据框比较挂起而没有错误消息

来自分类Dev

熊猫数据框比较没有让我困惑

来自分类Dev

将多个熊猫数据框写入多个Excel工作表

来自分类Dev

如何将文本表转换为熊猫数据框?

来自分类Dev

将Casout SAS表提取到熊猫数据框

来自分类Dev

将熊猫数据框导出到Excel工作表

来自分类Dev

将大熊猫中的CSV文件导入大熊猫数据框

来自分类Dev

将工作表数据插入到用户表单组合框中,没有重复 - Excel Vba

来自分类Dev

没有分组索引的熊猫数据透视表

来自分类Dev

如何使用sqlalchemy将具有datetime.timedelta类型数据对象的熊猫数据框存储到PostgreSQL d / b中?

Related 相关文章

  1. 1

    将“ .dat”文件导入熊猫数据框

  2. 2

    RPostgreSQL-将数据框导入表

  3. 3

    熊猫数据框没有绘图功能

  4. 4

    熊猫没有追加数据框

  5. 5

    有没有办法将npz文件转换为熊猫数据框?

  6. 6

    有没有办法将熊猫数据框打印为可复制代码?

  7. 7

    无法安装flask_sqlalchemy->导入错误:没有名为flask_sqlalchemy的模块

  8. 8

    如何将R数据框导入熊猫?

  9. 9

    以列表作为列将CSV导入熊猫数据框

  10. 10

    如果在熊猫数据框中没有,Multindex将添加零值

  11. 11

    熊猫没有将数据框的某些列转换为datetimeindex

  12. 12

    Flask-SQLAlchemy:没有链接这些表的外键

  13. 13

    OperationalError在Flask中没有这样的表与SQLAlchemy

  14. 14

    熊猫:将数据透视表打印到数据框

  15. 15

    有没有办法遍历熊猫数据框?

  16. 16

    将数据框导出/导入为Excel工作表

  17. 17

    熊猫数据框到没有索引的JSON

  18. 18

    从熊猫数据框中提取子集,确保没有重叠?

  19. 19

    为什么“空行”没有被删除(熊猫数据框)?

  20. 20

    熊猫数据框比较挂起而没有错误消息

  21. 21

    熊猫数据框比较没有让我困惑

  22. 22

    将多个熊猫数据框写入多个Excel工作表

  23. 23

    如何将文本表转换为熊猫数据框?

  24. 24

    将Casout SAS表提取到熊猫数据框

  25. 25

    将熊猫数据框导出到Excel工作表

  26. 26

    将大熊猫中的CSV文件导入大熊猫数据框

  27. 27

    将工作表数据插入到用户表单组合框中,没有重复 - Excel Vba

  28. 28

    没有分组索引的熊猫数据透视表

  29. 29

    如何使用sqlalchemy将具有datetime.timedelta类型数据对象的熊猫数据框存储到PostgreSQL d / b中?

热门标签

归档