用于gspread的类似数据库的接口。

gspread-db的Python项目详细描述


gspread分贝

安东·伯纳舍夫的gspread是一个用python与google电子表格交互的好软件包。该包提供了一个类似电子表格的界面,用户可以在其中创建和删除工作表、更新单元格值、附加新值,对于许多用户来说,这可能是与google电子表格交互的最直观和方便的方式,但对于许多应用程序来说,google电子表格基本上只是另一个数据库,因此类似数据库的界面可能更有意义。

gspread db向gspread添加一个新的api,该api支持最常见的数据库操作,如插入、删除、选择和更新。具体来说,电子表格被视为数据库,工作表被视为表,每个表/工作表的第一行被视为表的标题。因此,所有操作都依赖于此头来了解哪些字段是什么。

您可以通过pip:

pip3installgspread_db

然后,您可以开始移动数据:

importgspread_db# You can learn more about how to register your# service and get API credentials at:# https://gspread.readthedocs.io/en/latest/oauth2.htmlspreadsheet_key='spreadsheet-key'keyfile_dict={'type':'service_account','project_id':'you-project-id','private_key_id':'prive-key-id','private_key':'a-very-long-string','...':'...'}scope=['https://spreadsheets.google.com/feeds']auth=oauth2client.service_account.ServiceAccountCredentialscredentials=auth.from_json_keyfile_dict(keyfile_dict,scope)client=gspread_db.authorize(credentials)db=client.open_by_key(spreadsheet_key)db.create_table(table_name='Users',header=['Username','Email'])users=db['Users']users.insert({'Username':'annoys_parrot','Email':'not-my-email@email.com'})alessandro=users.select('Username','annoys_parrot')

注意,select操作默认返回pd.DataFrame。这可以通过将as_pandas参数设置为False来更改。

需要注意的是,表格的标题(即电子表格的第一行)不仅仅是一个美学元素。如果我们尝试插入一个新记录,其中的字段不包含在头中,则操作将失败。

>>>_=users.select(limit=1)>>>users.header['Username','Email']>>>user.insert({'Password':'123456'})RecordError:Keysinrecordmustbeasub-setofheader.

注意,从版本1.0开始,为了让Table().header返回任何内容,必须首先执行一个操作(这就是为什么在上面的示例的第一行中我们选择了一行)。这是因为电子表格中的头是在每次操作之前解析的,而不是在实例化时解析的。

更全面的示例:

db.create_table(table_name='Users',header=['Username','Email'])db['Users'].insert({'Username':'Alan','Email':'alan@turing.com'})# There are multiple ways to select users.alan=db['Users'].select('Username','Alan',as_pandas=False)turing=db['Users'].select(where=[('Username','eq','Alan')],as_pandas=False)alan==turing# Trueprint(alan)# {#   'Username': 'Alan',#   'Email': 'alan@turing.com'# }# We can also limit the number of fields returned.alan_email=db['Users'].select('Username','Alan',fields=['Email'])# We can update values for records matching some criteria.db['Users'].update('Username','Alan',new_values={'Email':'new@email.com'})# Lastly, we can delete records that match some criteria.db['Users'].delete('Username','Alan')# Note that for both update and delete all matching records will be updated# or deleted. Make sure your conditions only match the right records!

文档

注意,由于gspread_db只是gspread的一个包装器,gspread中可用于SpreasheetWorksheet的所有方法在gspread_db中也可用于数据库和表。

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

推荐PyPI第三方库


热门话题
Java例外。Lang.Stringindexoutofboundsexception索引超出范围(0)   java Spring引导Freemarker从2.2.0升级失败   重构Java反模式名称?包含对象的对象包含。。。等   用java处理JDBC可能出现的死锁的最佳方法   java无法访问主线程上的数据库,因为它可能会在很长一段时间内锁定UI   java如何将固定大小的画布包装在边框窗格中的滚动窗格居中?   java解析xsd文件后得到空结果   在html页面中表示XML文件的java   socketjava对象流   sql Java越界异常数据库   JavaJBoss7.1.1不会在Mavericks上启动   Twincat ADS事件驱动读取在一段时间后停止工作(Java)   java MyBatis使用生成的ID插入所有   Mojave上缺少MacOS Java控制面板   JavaGuice:如果多次注入相同的依赖项,是否注入了该依赖项的相同实例?