Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 将数据帧插入Postgres_Python_Django_Pandas_Postgresql_Dataframe - Fatal编程技术网

Python 将数据帧插入Postgres

Python 将数据帧插入Postgres,python,django,pandas,postgresql,dataframe,Python,Django,Pandas,Postgresql,Dataframe,我有一个pandas数据框,我想把它插入Django项目中的Postgres数据库 数据框有5列,数据库表有6列,而且数据框列和DB列的顺序不一样 因此,在合并两者之前,我是否必须确保数据帧和DB表中的列顺序相同?还有,请建议我如何处理缺少的列只需显式插入 如果表中的列顺序为A、B、C、D、E 但是你的熊猫有D,C,B,A的顺序(注意没有E栏) 只需生成一个SQL插入,如(注意,我没有E列) 希望有帮助如果dataframe的列名与数据库中的列名相同,您可以使用方法将df直接插入数据库表,并借助

我有一个pandas数据框,我想把它插入Django项目中的Postgres数据库

数据框有5列,数据库表有6列,而且数据框列和DB列的顺序不一样


因此,在合并两者之前,我是否必须确保数据帧和DB表中的列顺序相同?还有,请建议我如何处理缺少的列

只需显式插入

如果表中的列顺序为A、B、C、D、E

但是你的熊猫有D,C,B,A的顺序(注意没有E栏)

只需生成一个SQL插入,如(注意,我没有E列)


希望有帮助

如果dataframe的列名与数据库中的列名相同,您可以使用方法将df直接插入数据库表,并借助
sqlalchemy
进行连接:

from myapp.models import Bob
from sqlalchemy import create_engine
from django.conf import settings

db_connection_url = "postgresql://{}:{}@{}:{}/{}".format(
    settings.DATABASES['default']['USER'],
    settings.DATABASES['default']['PASSWORD'],
    settings.DATABASES['default']['HOST'],
    settings.DATABASES['default']['PORT'],
    settings.DATABASES['default']['NAME'],
)

engine = create_engine(db_connection_url)

df.to_sql(Bob._meta.db_table, engine, if_exists='append', index=False, chunksize=10000)

缺少的列将为空(或者数据库将设置默认值,如果它是在数据库级别而不是django级别定义的),或者您可以使用所需的值将缺少的列添加到dataframe中。

如果您在表中插入较少的列,则实际上有,并且您具有松散的约束(列可以为空)然后,其他列应该插入NULL。我认为最好的方法是
pandas.DataFrame.to_csv
-->
io.StringIO
-->
psycopg2.cursor.copy_to
@aws\u peedient列的顺序如何,这有关系吗?我不明白你在最后一行说的话。最后一行是你可以用来实现这一点的工具,是的,你的数据应该按照插入查询的方式组织
CREATE TABLE Bob (
    A int NOT NULL,
    B int NOT NULL,
    C int NOT NULL,
    D int NOT NULL,
    E int DEFAULT 42
);
from myapp.models import Bob
from sqlalchemy import create_engine
from django.conf import settings

db_connection_url = "postgresql://{}:{}@{}:{}/{}".format(
    settings.DATABASES['default']['USER'],
    settings.DATABASES['default']['PASSWORD'],
    settings.DATABASES['default']['HOST'],
    settings.DATABASES['default']['PORT'],
    settings.DATABASES['default']['NAME'],
)

engine = create_engine(db_connection_url)

df.to_sql(Bob._meta.db_table, engine, if_exists='append', index=False, chunksize=10000)