Python 完成前的字符串清除

Python 完成前的字符串清除,python,stringio,Python,Stringio,我甚至不确定这是否是最好的方法,但我从URL中获取一系列数据,并将它们加载到pandas中进行一些表清理(列重命名、格式化日期等) 每个url都是唯一的,但实际上只是分页数据(特别是odata链接)。然后,我从数据帧进行StringIO sql查询,并使用sqlalchemy将数据加载到mssql中 表1正确加载,但从那里开始,其他表很短。我想斯特里奥尼奥的作品还没写完就已经写完了,但我想也许另一双眼睛可以看到一些我看不到的东西。有些表有3000行,而有些表可能有300000行。每次运行时,都会

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

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

表1正确加载,但从那里开始,其他表很短。我想斯特里奥尼奥的作品还没写完就已经写完了,但我想也许另一双眼睛可以看到一些我看不到的东西。有些表有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 
因此,我将数据帧传递到函数中,并获取用于创建表的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)

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

也许我遗漏了一些明显的东西,但为什么不使用列表?一个用于StringIO对象的列表?不,我指的是列表而不是
StringIO
对象。字符串列表。看看你的代码,我猜你是来自java还是C++?在python中,我们不倾向于使用字符串连接或缓冲区(文件除外)。