完成前清除字符串

2024-05-08 22:09:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我甚至不确定这是最好的方法,但是,我从url中获取一系列数据,并将它们加载到pandas中进行一些表清理(列重命名、格式化日期等)。你知道吗

每个url都是唯一的,但实际上只是分页数据(特别是odata链接)。然后,我从dataframes进行stringiosql查询,并使用sqlalchemy将数据加载到mssql中。你知道吗

表1加载正确,但从那里其他表是短的。我认为StrionIO对象在完成之前已经被重写了,但是我想也许另一双眼睛可以看到一些我看不到的东西。一些表有3000行,而另一些表可能有300000行。每次运行此操作时,链接和表的数量都会不同。因此,一次可能有30个链接,总共填充6个表,下一次可能有一半。你知道吗

我不能发布链接到数据,但如果你想要数据。你知道吗

localengine = create_engine ("mssql://Username:Password@myServer/myDB?"\
"driver=SQL+Server+Native+Client+11.0")

localconn = localengine.connect()

# CREATE THE BUFFER TO STORE THE SQL INSERT STATEMENTS
buf = StringIO()

# THIS CREATES THE INSERT STATEMENT
def SQL_INSERT_STATEMENT_FROM_DATAFRAME(SOURCE, TARGET):
    print ("Writing to Buffer")
    sql_text = []

    for index, row in SOURCE.iterrows():
        sql_text = 'INSERT INTO '+TARGET + \
        '_union (' + str(', '.join(SOURCE.columns)) + ') VALUES ' + str(tuple(row.values))
        buf.write(sql_text)
    t = buf.getvalue()
    return t 

因此,我将dataframe传递到函数中,并获取用于创建表的stringio对象。item是我正在迭代的表名。你知道吗

rows = [4000, 3000, 670000, 50000,80000,67000,480000]
for i in rows:
    df = pd.DataFrame(np.random.randint(0,100,size=(i, 150)))
    g = SQL_INSERT_STATEMENT_FROM_DATAFRAME(df, item)
    insert_query = sqlalchemy.text(g)
    localconn.execution_options(autocommit=True).execute(insert_query)
    print ("done")
    # CLEAR THE BUFFER
    buf.truncate(0)

如前所述,第一个表加载了正确的行数,但之后没有行数,因此我认为缓冲区对象可能在完成之前被覆盖,或者表会话正在关闭。我已经试着包含尽可能多的代码来模仿我的工作流程。有没有办法克服这个问题?你知道吗


Tags: the数据对象texturlsourcesqlsqlalchemy