【问题标题】:Python / Pandas / SQL table issuesPython / Pandas / SQL 表问题
【发布时间】:2021-11-18 07:51:17
【问题描述】:

我希望有人可以帮助我,我有一个使用 Python 和 SQlite 完成大学课程的任务。

我有两张 Excel 表格,我想将它们分成两张表格,并在一些财务信息上进行左连接。我已经开始将两张表导入熊猫,我认为是创建两张表,但老实说,我不知道我哪里出错了。电子表格包含的列比我想在 SQL 数据库中使用的多得多。这会是个问题吗?

我最终收到错误代码“OperationalError: table Lockedlist has no column named Site Ref”

import pandas as pd

Lockedlist_panda = pd.read_excel (r'Location of Lockedlist_panda')
PO1report_panda = pd.read_excel (r'Location of PO1report_panda')

import sqlite3
conn = sqlite3.connect("data_superstore1.db")
cursor = conn.cursor()
sql='''CREATE TABLE Lockedlist (
    NR TEXT,
    Programme TEXT NOT NULL,
    Sub_Region TEXT NOT NULL,
    Site_Type TEXT NOT NULL,
    MS13_Actual TEXT NOT NULL,
    PRIMARY KEY(NR)
    )'''

cursor.execute(sql)
print("Table created successfully........")

#Commit your changes in the database
conn.commit()

#Closing the connection
conn.close()

conn = sqlite3.connect("data_superstore1.db")
cursor = conn.cursor()
sql='''CREATE TABLE PoReportTable (
    Tracking_Field TEXT,
    VENDOR TEXT NOT NULL,
    Short_Text TEXT NOT NULL,
    COST INT NOT NULL,
    PRIMARY KEY(Tracking_Field)
    )'''

cursor.execute(sql)
print("Table created successfully........")

#Commit your changes in the database
conn.commit()

#Closing the connection
conn.close()

conn = sqlite3.connect("data_superstore1.db")
Lockedlist_panda.to_sql('Lockedlist', conn, if_exists='append', index=False)
PO1report_panda.to_sql('PoReportTable', conn, if_exists='append', index=False)

#Commit your changes in the database
conn.commit()

#Closing the connection
conn.close()

【问题讨论】:

    标签: python sql pandas sqlite


    【解决方案1】:

    确实,pandas 会尝试将数据框中的所有列插入数据库,因此,如果它的列多于您在数据库中定义的列,它将抱怨缺少的列,

    尝试首先将您的数据框限制为您想要的列:

    Lockedlist_panda = Lockedlist_panda[["NR","Programme","Sub_Region","Site_Type","MS13_Actual" ]]
    

    【讨论】:

    • 不感兴趣,我可以创建两个表名,然后直接进入 panda.to_sql 函数吗?
    • 我不确定我是否理解这个问题,如果您想使用带有附加选项的现有表,数据框中的列必须与表中的列匹配,因此您需要有一个中间操作,另一种方法是使用替换选项,让熊猫用数据框中的所有列覆盖你的表。此外,在每个操作之间提交、关闭和重新打开新的数据库连接也不是强制性的。
    • 谢谢,理想情况下,我希望 SQL 表能够匹配数据框中的所有列。我将如何使用替换选项?
    • 在 to_sql 调用中将“append”替换为“replace”,如果表已经存在,它将删除它并在插入之前使用所有列重新创建它。 Lockedlist_panda.to_sql('Lockedlist', conn, if_exists='replace', index=False) 文档:pandas.pydata.org/pandas-docs/stable/reference/api/…
    • 谢谢!我认为这已经奏效了,我不能给你反馈,因为我的声誉太低了,但是谢谢!
    猜你喜欢
    • 2015-02-17
    • 2017-03-14
    • 1970-01-01
    • 2021-04-19
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2020-06-01
    相关资源
    最近更新 更多