将多个csv文件上传到python中的sharepoint文件夹?

时间:2021-05-13 15:08:48

标签: python postgresql sharepoint sqlalchemy

我正在尝试将从 PostgreSQL db 中提取的数据保存到指定的 MS SharePoint 文件夹中。为此,首先我从本地数据库检索数据,然后我需要将此数据存储/保存到 SharePoint 文件夹。我尝试使用 office365 api 来执行此操作,但没有数据保存在 SharePoint 文件夹中。有没有人有类似的经验在 python 中执行此操作?在 python 中执行此操作的任何解决方法?有什么想法吗?

我目前的尝试

首先,我确实从本地 postgresql 数据库中提取了数据,如下所示:

from sqlalchemy import create_engine
import pandas as pd
import os.path

hostname = 'localhost'
database_name = 'postgres'
user = 'kim'
pw = 'password123'

engine = create_engine('postgresql+psycopg2://'+user+':'+pw+'@'+hostname+'/'+database_name)

sql = """ select * from mytable """

with engine.connect() as conn:
    df = pd.read_sql_query(sql,con=engine)

然后,我尝试将数据存储/保存到指定的共享点文件夹,如下所示:

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File 

url_shrpt = 'https://xyzcompany.sharepoint.com/_layouts/15/sharepoint.aspx?'
username_shrpt = 'kim@xyzcompany.com'
password_shrpt = 'password123'
folder_url_shrpt = 'https://xyzcompany.sharepoint.com/:f:/g/EnIh9jxkDVpOsTnAUbo-LvIBdsN0X_pJifX4_9Rx3rchnQ'

ctx_auth = AuthenticationContext(url_shrpt)
if ctx_auth.acquire_token_for_user(username_shrpt, password_shrpt):
    ctx = ClientContext(url_shrpt, ctx_auth)
    web = ctx.web
    ctx.load(web)
    ctx.execute_query()

else:
    print(ctx_auth.get_last_error())

response = File.open_binary(ctx, df)

with open("Your_Offline_File_Path", 'wb') as output_file:  
    output_file.write(response.content)

但文件未保存在 SharePoint 文件夹中。我们应该如何使用 python 将数据从 PostgreSQL 保存到 SharePoint 文件夹?有什么解决方法可以做到这一点吗?有什么想法吗?

目标

我想将从 PostgreSQL 数据库中提取的数据写到 SharePoint 文件夹中。从我目前的尝试来看,上述尝试没有将数据保存到 sharepoint 文件夹中。任何人都可以建议这样做的可能方法吗?

1 个答案:

答案 0 :(得分:1)

@Jared 在那里的内容略有不同,例如,如果您想根据日期创建一个文件夹并将文件从用户计算机上的根文件夹以外的位置上传到该文件夹​​。这对于对这样的解决方案感兴趣的人会很方便,这是我遇到的问题。

from shareplum import Site
from shareplum import Office365
from shareplum.site import Version
import pendulum #Install it for  manipulation of  dates 

todaysdate = pendulum.now() Get todays date 
foldername1 = todaysdate.strftime('%d-%m-%Y') #Folder name in a format such as  19-06-2021

UN = "myself@xyzcompany.com"
PW = "hello#"

path = r"C:\xxxx\xxx\xxx" #Path where the files to be uploaded are stored.
doc_library = "xxxxx/yyyy" #Folder where the new folder (foldername1) will be stored

authcookie = Office365('https://xyzcompany.sharepoint.com',username=UN,password=PW).GetCookies()
site = Site('https://xyzcompany.sharepoint.com/sites/sample_data/',version=Version.v365,authcookie=authcookie)
folder = site.Folder(doc_library+'/'+foldername1) #Creates the  new  folder matching  todays date. 

files = glob.glob(path+"\\*.csv")
for file in files:
    with open(file, mode='rb') as rowFile:
        fileContent = rowFile.read()
    folder.upload_file(fileContent, os.path.basename(file))

这个解决方案适用于寻找此类代码的任何人。