Using Python 🐍 with Google Sheets as a database
Imagine you want to build an internal progamm with Python and need a small database. Why not use Google Sheets? In this tutorial I want to show you how to use Google Sheets in Python 3.
Requirements
For this tutorial you need
Difficulty
Let's say it's Intermediate
.
Programming
Installation
First of all we have to install some dependencies.
$ pip install gspread oauth2client
After this quick installation we have to create a new file. Let's call it grocery-list.py
. Insert a quick Python barebone into it and give it a try with python grocery-list.py
.
#!/usr/bin/python3
def main():
print('Hello world!')
if __name__ == '__main__':
main()
Create a client
First be sure that you've shared your spreadsheet with the client_email
you find in your Google API credential JSON.
Rename this JSON into client-secret.json
and modify your script.
#!/usr/bin/python3
import gspread
import os.path
import sys
from oauth2client.service_account import ServiceAccountCredentials
client_secret = 'client-secret.json'
def main():
if not os.path.isfile(client_secret):
print('Client secret not found. Create one here: https://console.developers.google.com/apis')
sys.exit(1)
client = get_client()
def get_client():
scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name(client_secret, scope)
client = gspread.authorize(creds)
return client
if __name__ == '__main__':
main()
At this point we have successfully created a client for the Google Drive API. Furthermore we have ensured that our client-secret.json
does exist, before we try to use it.
Fetch all rows
It's time to get some data and pretty print it into the console.
#!/usr/bin/python3
# ...
import pprint
def main():
# ...
client = get_client()
sheet = client.open('grocery_list').sheet1
results = get_all(sheet)
pp = pprint.PrettyPrinter()
pp.pprint(results)
def get_all(sheet):
results = sheet.get_all_records()
return results
# ...
If we did it all right it should look something like this:
Append a row
Now we want to write a new row as last element into the spreadsheet.
#!/usr/bin/python3
# ...
def main():
# ...
last_id = results[-1].get('id')
insert_new(sheet, [(int(last_id) + 1), 1, 'food', 'Mango'], len(results) + 2)
def insert_new(sheet, row, index):
sheet.insert_row(row, index)
# ...
Execute the script with python grocery-list.py
and open the spreadsheet in your browser. It should look like this:
À voilà! A simple database like structure using Python and Google Sheets.
With that in mind, happy coding.
(() => {
const colors = [
'001f3f', '0074d9', '7fdbff', '39cccc',
'3d9970', '2ecc40', '01ff70', 'ffdc00',
'ff851b', 'ff4136', '85144b', 'f012be',
];
const contents = ['%cI', '%c❤', '%cweb', '%cdev'];
const options = Array.from(
new Array(contents.length),
() => `
color:#${colors[Math.floor(Math.random() * colors.length)]};
font-size:64px;
`
);
console.log.apply(console, [contents.join('')].concat(options));
})();
Posted on Utopian.io - Rewarding Open Source Contributors
Hey @drookyn I am @utopian-io. I have just upvoted you!
Achievements
Suggestions
Get Noticed!
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x
Good tutorial, excellent information for small and medium solutions.
Thanks :)
In my last company we used Google spreadsheet quite often as a easy backend, even for some static websites for very big clients! 😉 It's really a good way to get a cheap and somehow safe backend quiet fast 😊
Really? That sounds crazy! For something small I could imagine using it but not for something big 😅
The projects weren't that big, just the client was a really big one ;)
Thank you for the contribution. It has been approved.
In the future don't add irrelevant code to the end of your tutorials.
You can contact us on Discord.
[utopian-moderator]