用于在SQL数据库和Google驱动器文件夹之间进行交互的接口
SQL-google-interface的Python项目详细描述
SQL谷歌界面
这个项目提供了一套简单的工具来在SQL数据库和googledrive之间传输数据。它是在波特兰的波特兰公立学校(PPS)开发的,或者是为了帮助管理人员和分析人员有计划地与学校共享敏感数据。例如,这个接口允许分析员创建简单的python脚本,从内部数据库中提取数据并填充Google驱动器上的各个学校文件夹。用户可以格式化电子表格、上传图表、更改权限等等。在
使用Google Drive与学校沟通的优势在于:
- 学校校长、秘书和行政人员都熟悉谷歌硬盘
- 学区通常已经与谷歌签订了安全合同
入门
这些说明将为您提供一个项目副本,并在本地计算机上运行。请注意,您需要Python3.6或更高版本(不支持Python2.7)
安装
开始跑步需要三个步骤:
- 首先,我们需要安装实际的Python包(和依赖项)
- 下一步,我们需要从Google获取凭据,以便您可以访问和修改服务器资源
- 最后,我们需要创建一个包含连接到内部数据库的信息的文本文件
安装Python包
首先,打开一个命令提示符并使用PIP安装包。这将自动安装依赖项(如果您希望独立安装,请在下面列出):
pip install sql-google-interface
您可以通过检查已安装的python包来检查包是否已安装:
^{pr2}$获取谷歌认证
转到Google API console。如果您的组织已经有一个项目,请要求项目所有者授予您成员权限。否则,为您的组织创建一个新项目,并将其命名为类似“sqlgoogleinterface”的名称。在
导航到项目,然后enable the Google Drive and Google Sheets API's。在
创建凭据!在
- 转到左侧边栏上的“凭证”选项卡
- 单击“创建凭据”->;“OAuth客户端ID”
- 选择“其他”作为应用程序类型。对于名称,请使用类似“your name client id”的名称。在
- 单击“创建”后,下载客户机ID,将其重命名为
client_secret.json
,并将其放入C:/
驱动器中。在
获取谷歌认证
创建一个名为server_connection_data.txt
的文本文件,并将其放在C:\connection_data\
这样的目录中。在
此文件应如下所示:
server = [server_name]
database = [database_name]
全部完成!您已经准备好运行基本测试了。在
先决条件
如果您感兴趣,下面是一个包依赖项的列表
backoff
google-api-python-client
numpy
pyodbc
pandas
运行测试
这个存储库附带了一些基本测试,以确保您的服务器连接和Google凭据正常工作。在
下载./tests/basic_test.py
。确保脚本包含指向client_secret.json
和server_connection_data.txt
文件的正确路径。在
client_secret_file = "C:/client_secret.json"
connection_data = "C:/connection_data/server_connection_data.txt"
接下来,cd
到适当的目录中并运行basic_test.py
文件。(第一次运行时,您需要按照OAuth授权流对您的凭据进行授权。这只发生一次,之后您可以删除client_secret.json
文件。)
使用示例
下面是一个简短的示例脚本,它从SQL数据库获取数据并将其上载到googlesheet中。如果它已经在今天运行,它将删除当前的电子表格并创建一个新的电子表格。请注意如何使用自定义元数据来标识文件。在
from datetime import date
from sql_google_interface import interface
server = <your-server-name>
database_name = <your-database-name>
parent_folder_id = <parent-folder-id>
SQL_filepath = "./data.sql"
client_secret_file = "C:/client_secret.json"
# get the connection to the SQL server and get data
cnn = interface.get_server_connection(server, database_name)
dataframe = interface.get_data_from_server(cnn, SQL_filepath)
cnn.close()
# get credentials for uploading data
credentials = interface.get_credentials(client_secret_file)
# create a drive and sheets service to interact with Google
drive_service = interface.get_drive_service(credentials=credentials, service_type='drive')
sheets_service = interface.get_drive_service(credentials=credentials, service_type='sheets')
# Create filename using month abbreviation, day, and year
today = date.today().strftime("%b-%d-%Y")
data_filename = "Data run {}".format(today)
# search to see if a file has already been uploaded today; if so delete it
file_data_from_search = interface.get_files_from_drive(drive_service=drive_service,
parent_id=parent_folder_id,
custom_metadata={"data-date" : today})
file_ids_from_search = [item['id'] for item in file_data_from_search]
if file_ids_from_search:
print("There has already been a file created today. I will overwrite it with new data.")
interface.delete_drive_files_by_ID(drive_service=drive_service, list_of_file_ids=file_ids_from_search)
sheet_id = interface.create_spreadsheet(drive_service=drive_service,
spreadsheet_name=data_filename,
parent_folder_list=[parent_folder_id],
custom_metadata={"data-date" : today})
print("Created spreadsheet with id {}".format(sheet_id))
# upload data to the spreadsheet
interface.populate_spreadsheet_from_df(sheets_service, sheet_id, dataframe)
# format the spreadhseet
interface.format_spreadsheet(sheets_service, sheet_id, wrap_strategy="WRAP")
用
- Google Drive API-用于与googledrive通信的API
- Google Sheets API-用于与googlesheets内容交互的API
作者
- Will Kearney-初始工作-GitHub
许可证
这个项目是在MIT许可下授权的-请参阅LICENSE.md文件了解详情
致谢
- Shawn Helm-PPS-PPS Analytics Homepage首席分析师
- 项目
标签: