use*_*505 5 postgresql python-3.x pandas
我使用to_sql()将熊猫数据帧保存到 postgres db 表。如果其中一行的格式不正确,则会引发 psycopg2.DataError 并且不会保存整个数据帧。我试图捕捉错误并使用 chunksize = 1 一一保存行,但结果是一样的。如何忽略损坏的行?这是我使用的代码:
from sqlalchemy import create_engine
engine = create_engine('postgresql+psycopg2://postgres@localhost/db_name')
df = pd.read_csv(filename, chunksize=CHUNKSIZE, error_bad_lines=False)
for chunk in df:
try:
chunk.to_sql(TABLE_NAME, con=engine,)
except:
chunk.to_sql(TABLE_NAME, con=engine, chunksize=1)
Run Code Online (Sandbox Code Playgroud)
我希望 to_sql 只忽略损坏的行并保存所有其他行。是否可以实现?当前的解决方法是将数据帧拆分为更小的部分并一一保存。虽然它很贵。
我建议采用与您类似的方法,但有一些例外:
def insert_data(df, table_name):
try:
df.to_sql(table_name, con=engine, if_exists='append', index=False)
except Exception as error:
print(error)
df.to_sql(table_name, con=engine, if_exists='append', index=False, chunksize=1000)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |