用于在SQL数据库和Google驱动器文件夹之间进行交互的接口

SQL-google-interface的Python项目详细描述


SQL谷歌界面

这个项目提供了一套简单的工具来在SQL数据库和googledrive之间传输数据。它是在波特兰的波特兰公立学校(PPS)开发的,或者是为了帮助管理人员和分析人员有计划地与学校共享敏感数据。例如,这个接口允许分析员创建简单的python脚本,从内部数据库中提取数据并填充Google驱动器上的各个学校文件夹。用户可以格式化电子表格、上传图表、更改权限等等。在

使用Google Drive与学校沟通的优势在于:

  1. 学校校长、秘书和行政人员都熟悉谷歌硬盘
  2. 学区通常已经与谷歌签订了安全合同

入门

这些说明将为您提供一个项目副本,并在本地计算机上运行。请注意,您需要Python3.6或更高版本(不支持Python2.7)

安装

开始跑步需要三个步骤:

  1. 首先,我们需要安装实际的Python包(和依赖项)
  2. 下一步,我们需要从Google获取凭据,以便您可以访问和修改服务器资源
  3. 最后,我们需要创建一个包含连接到内部数据库的信息的文本文件

安装Python包

首先,打开一个命令提示符并使用PIP安装包。这将自动安装依赖项(如果您希望独立安装,请在下面列出):

pip install sql-google-interface

您可以通过检查已安装的python包来检查包是否已安装:

^{pr2}$

获取谷歌认证

转到Google API console。如果您的组织已经有一个项目,请要求项目所有者授予您成员权限。否则,为您的组织创建一个新项目,并将其命名为类似“sqlgoogleinterface”的名称。在

导航到项目,然后enable the Google Drive and Google Sheets API's。在

创建凭据!在

  1. 转到左侧边栏上的“凭证”选项卡
  2. 单击“创建凭据”->;“OAuth客户端ID”
  3. 选择“其他”作为应用程序类型。对于名称,请使用类似“your name client id”的名称。在
  4. 单击“创建”后,下载客户机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.jsonserver_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")

作者

  • Will Kearney-初始工作-GitHub

许可证

这个项目是在MIT许可下授权的-请参阅LICENSE.md文件了解详情

致谢

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java不兼容类型:MainActivity无法转换为LifecycleOwner   java安卓是一种更有效的读取大文本文件的方法   java导出LWJGL本地人与项目?(IntelliJ IDEA)   JDK更新后,JavaJShell不再在下一行打印输出   父类对象上的继承Java比较子属性   Java:有没有一个容器可以有效地结合HashMap和ArrayList?   安卓 Java对象指针   java在annotationdriven Spring MVC应用程序中实现大气   java 安卓源代码构建应用找不到安卓supportv4。罐子   文件系统上的抽象层和Java中的jar/zip   java在水平滚动视图中添加多个图像?   java如何从firebase实时数据库中获取字符串数组   WIndows 10工作站上的java未满足链接错误   java命令在终端中工作,但在使用过程中出现“无结束引号”错误。执行官