django 中的 Pandas to_sql

use*_*299 9 django pandas

我正在尝试使用 Django 的 db 连接变量将 Pandas 数据框插入到 Postgres 数据库中。我使用的代码是

df.to_sql('forecast',connection,if_exists='append',index=False)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;' 执行失败:关系“sqlite_master”不存在第 1 行:SELECT name FROM sqlite_master WHERE type='table' AND name=?...

我认为这是因为 Django 连接对象不是 sqlalchemy 对象,因此 Pandas 假设我使用的是 sqlite。除了与数据库建立另一个连接之外,还有什么方法可以使用 .to_sql 吗?

Oma*_*ado 4

可以在setting.py文件中创建数据库配置

DATABASES = {
    'default': env.db('DATABASE_URL_DEFAULT'),
    'other': env.db('DATABASE_URL_OTHER')
}
DB_URI_DEFAULT=env.str('DATABASE_URL_DEFAULT')
DB_URI_OTHER=env.str('DATABASE_URL_OTHER')
Run Code Online (Sandbox Code Playgroud)

如果你想创建 sql_alchemy 连接,你应该使用 DB_URI_DEFAULT 或 DB_URI_OTHER

在类的init方法中,您将使用您应该编写的 .to_sql 方法

from you_project_app import settings
from sqlalchemy import create_engine
import pandas as pd

class Example:

 def __init__(self):
        self.conn_default = create_engine(settings.DB_URI_DEFAULT).connect()
Run Code Online (Sandbox Code Playgroud)

当你使用 pandas 的 .to_sql 方法时,它应该是这样的:

df_insert.to_sql(table, if_exists='append',index=False,con=self.conn_default)
Run Code Online (Sandbox Code Playgroud)