【问题标题】:Pandas df to database using flask-sqlalchemyPandas df 使用 flask-sqlalchemy 到数据库
【发布时间】:2017-09-20 04:26:02
【问题描述】:

我正在尝试将 pandas 数据框插入 mysql 数据库。我正在使用flask-sqlalchemy。

我已经创建了这张表:

class Client_Details(db.Model):
    __tablename__ = "client_history"

    client_id = db.Column(db.Integer, primary_key=True)
    client_name = db.Column(db.VARCHAR(50))
    shack= db.Column(db.VARCHAR(50))

我想将这个df中的数据插入其中:

index   name     shack
0        jay       H9
1        ray       I8
2        t-bop     I6
3        jay-k     F89
4        phil      D89

这似乎不起作用:

for index, row in df.iterrows():
    client_add = client_history(client_name = row[1], shack =row[2])
    db.session.add(client_add)
    db.session.commit()

有没有更好的方法来做到这一点,也许使用to_sql

【问题讨论】:

  • df.to_sql() 可以解决问题,尽管我发现它对于大型表来说非常慢。

标签: python pandas sqlalchemy flask-sqlalchemy


【解决方案1】:

Kyle 的回答很接近——flask-sqlalchemy 引擎是在幕后用一些魔法创建的,但访问它的正确方法是使用 db.engine。这就是您要查找的内容:

df.to_sql(name='client_history', con=db.engine, index=False)

我也同意 VinceP 的评估,即 to_sql 对于较大的表可能会很慢,因此请记住这一点。

对于它的价值,您还可以使用 Flask-SQLAlchemy 作为 db.session 访问会话。

【讨论】:

    【解决方案2】:
    df.to_sql(engine, 'client_history') 
    

    是您正在寻找的。没有快速的方法来做到这一点(我知道),但通常使用内置的 pandas 函数会比您自己创建的任何解决方案更快。

    【讨论】:

    • 谢谢。 sqlalchemy 不使用engine,如何用flask 做到这一点?app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI app.config["SQLALCHEMY_POOL_RECYCLE"] = 299 app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER db = SQLAlchemy(app)
    • SQLAlchemy 确实使用了engine。我不是 100% 确定如何使用 sqlalchemy + flask 获得引擎,但我猜你可以通过你的 db 对象访问它,如果这不是 engine 的实例。
    猜你喜欢
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2021-11-02
    • 2018-02-09
    • 2014-03-25
    相关资源
    最近更新 更多