Python3,使用Pandas函数df.to_sql()与SQLAlchemy将数据帧插入PostgreSQL数据库

时间:2016-11-17 12:43:24

标签: python sql postgresql pandas sqlalchemy

如何指定表的主键?如果使用标准SQL执行此操作,我将使用:

CREATE TABLE table (
    uid TEXT PRIMARY KEY NOT NULL,\
    age SMALLINT    NOT NULL,\
    gen TEXT        NOT NULL,\
    eth TEXT        NOT NULL,\
    biu BOOLEAN     NOT NULL,\
    pst TEXT        NOT NULL,\
    jse TEXT        NOT NULL,\
    emp TEXT        NOT NULL,\
    inc INT         NOT NULL,\
    own BOOLEAN     NOT NULL,\
    edu INT         NOT NULL,\
    res TEXT        NOT NULL);

然后使用INSERT查询填充表。 Pandas函数df.to_sql()似乎不允许我定义主键。我可以指定一个字典' dtype'指定每列的数据类型,但我找不到指定主键的方法,或指定' NOT NULL'

我对使用Python的SQLite有一些经验,但我对PostgreSQL来说是全新的。

1 个答案:

答案 0 :(得分:-1)

I think pandas is not allowing you to specify your PRIMARY KEY and other sql constraints when using to_sql().一个常见的解决方案似乎是使用sqlalquemy或psycopg2创建表,例如

import psycopg2
conn_string = "host=" + your_hostname + " port=" + your_port + " dbname=" + your_database + " user=" + your_uid + " password=" + your_pwd
conn = psycopg2.connect(conn_string)
cur = con.cursor()

cur.execute("""CREATE TABLE table (
               uid TEXT PRIMARY KEY NOT NULL,
               age SMALLINT    NOT NULL,
               gen TEXT        NOT NULL,
               eth TEXT        NOT NULL,
               and so on...);"""
con.commit()

然后通过" INSERT INTO"插入数据查询,或者如果要通过pandas.to_sql()命令直接插入数据,则需要传递由sqlalchemy创建的连接。

我希望这会有所帮助。