In diesem Artikel werden wir Google Sheets-Daten mit Python in einer Datenbank speichern. Der erste Schritt besteht darin, die API zu aktivieren und die Anmeldeinformationen zu erstellen, also fangen wir an.

Aktivieren der APIs und Erstellen der Anmeldeinformationen

  • Gehen Sie in der Cloud Console zum Marktplatz .
  • Klicken Sie auf APIS UND DIENSTE AKTIVIEREN
  • Suchen Sie dann nach Google Drive API und aktivieren Sie es
  • Gehen Sie dann zur Registerkarte Anmeldeinformationen in der linken Navigationsleiste auf dem Bildschirm.
  • Klicken Sie dann auf Anmeldeinformationen erstellen und wählen Sie dann Dienstkontoschlüssel aus
  • Erstellen Sie dann ein neues Dienstkonto, indem Sie ihm einen Namen geben, und legen Sie die Rolle im Unterfeld „Projekte“ auf „Editor“ fest. Behalten Sie den Schlüsseltyp als JSON bei und klicken Sie auf die Schaltfläche „Erstellen“. Bewahren Sie das heruntergeladene JSON sicher auf.
  • Nachdem alle diese Schritte durchgeführt wurden, sollte Ihre Seite in etwa so aussehen.
  • Gehen Sie erneut zum Dashboard und folgen Sie den gleichen Schritten. Suchen Sie dieses Mal nach Google Sheets und aktivieren Sie die API.

Nachdem Sie die API aktiviert haben, erstellen Sie das Google-Formular.

Erstellen des Google-Formulars:

  1. Erstellen Sie ein Google-Formular. Hier haben wir ein einfaches Formular mit nur zwei Feldern beibehalten.
  2. Sorgen Sie dafür, dass das Google-Formular Antworten in Google Sheets akzeptiert.
  3. Suchen Sie dann in der heruntergeladenen JSON-Datei nach dem Feld client_email und kopieren Sie diese E-Mail.
  4. Öffnen Sie die neu erstellte Tabelle und klicken Sie auf die Option „Teilen“ und geben Sie dort die client_email ein.

Nachdem Sie Zugriff auf die Client-E-Mail gewährt haben, sollte es ungefähr so ​​​​aussehen. Die oberste E-Mail ist Ihre persönliche E-Mail und die untere die client_email

Google-Formular:

Damit sind wir mit der Einrichtung fertig. Kommen wir nun zum Code. Bevor wir beginnen, lassen Sie uns einfach den Fluss verstehen.

  1. Wir werden eine Datenbank und eine Tabelle gemäß den Eingabeschemata des Formulars erstellen.
  2. Stellen Sie über die API eine Verbindung zu den Blättern her und rufen Sie alle Zeilen ab.
  3. Führen Sie die Einfügeabfrage aus, um die Zeilendaten aus Blättern in die Datenbank einzufügen.

Sich nähern:

  1. Zuerst initialisieren wir die Anmeldeinformationen aus dem Dienstkonto JSON.
  2. Wir verwenden dann dieses Anmeldedatenobjekt, um auf das Blatt zuzugreifen, das wir aus dem Google-Formular generiert haben.
  3. Sobald wir Zugriff auf die Blätter haben, extrahieren wir einfach alle Zeilen auf einmal, um die Anzahl der API-Aufrufe zu reduzieren.
  4. Jetzt stellen wir zuerst unsere Verbindung zur Datenbank her. Hier verwenden wir der Einfachheit halber die SQLite-Datenbank. Sie können jede Art von Datenbank verwenden, Sie müssen lediglich die Verbindungszeichenfolge weitergeben.
  5. Sobald die Verbindung hergestellt ist, erstellen wir die Tabelle (falls nicht vorhanden).
  6. Sobald die Tabelle fertig ist, übergeben wir die abgerufenen Zeilen an die Tabelle. Wir iterieren einfach über alle erhaltenen Zeilen und geben dann jeden Spaltenwert in der Zeile an die Datenbank weiter.

Code:

Python3

# imports
import sqlite3
from sqlite3 import Error
import gspread
from oauth2client.service_account import ServiceAccountCredentials
  
  
def get_from_sheet():
    
    # name of the sheet
    # you should replace with the name 
    # of your sheet
    sheet_name = "Details (Responses)"
    config = { Your_API
      
    # should contain the service account 
    # key JSON as dict here
    }
      
    # use credentials to create a client to
    # interact with the Google Drive API
    scope = [
        "https://spreadsheets.google.com/feeds",
        "https://www.googleapis.com/auth/drive",
    ]
      
    # credential object for authenticating
    creds_obj = ServiceAccountCredentials.from_json_keyfile_dict(config, scope)
      
    # initializing gspread client with the
    # credentials object
    client = gspread.authorize(creds_obj)
      
    # Find a workbook by name and open the 
    # first sheet Make sure you use the
    # right name here.
    sheet = client.open(sheet_name).sheet1
      
    # returns all the data in the entire sheet
    return sheet.get_all_values()
  
  
class SQLite:
    
    # change this to your sqlite file path
    # if you keep then, then it will create
    # a sqlite database in your current working 
    # directory
    DB_NAME = "db.sqlite"
  
    def __init__(self):
        self.conn = self.create_connection()
        self._get_or_create_table()
  
    @classmethod
    def create_connection(cls):
        """
        create a database connection to the SQLite database specified by db_name
        :return: Connection object or None
        """
        conn = None
        try:
            
            # connects or creates a sqlite3 file
            conn = sqlite3.connect(cls.DB_NAME)
            return conn
        except Error as e:
            print(e)
              
        # returns the connection object
        return conn
  
    def _get_or_create_table(self):
        """Creates the table if it does not exists"""
          
        # sql query to create a details table
        create_table_sql = """CREATE TABLE IF NOT EXISTS details (
            timestamp varchar(20) PRIMARY KEY,
            name varchar(30) NOT NULL,
            year varchar(3) NOT NULL
        )"""
        try:
            
            # initializing the query cursor
            c = self.conn.cursor()
              
            # executes the create table query
            c.execute(create_table_sql)
        except Error as e:
            
            # prints the exception if any errors 
            # occurs during runtime
            print(e)
  
    def add_data_to_table(self, rows: list):
        """Inserts the data from sheets to the table"""
          
        # initializing sql cursor
        c = self.conn.cursor()
          
        # excluding the first row because it 
        # contains the headers
        insert_table_sql = """INSERT INTO details (timestamp, name, year) 
        VALUES (?, ?, ?);"""
        for row in rows[1:]:
            
            # inserts the data into the table
            # NOTE: the data needs to be in the order 
            # which the values are provided into the 
            # sql statement
            c.execute(insert_table_sql, tuple(row))
              
        # committing all the changes to the database
        self.conn.commit()
          
        # closing the connection to the database
        c.close()
  
  
if __name__ == '__main__':
    
    # fetches data from the sheets
    data = get_from_sheet()
  
    sqlite_util = SQLite()
    sqlite_util.add_data_to_table(data)

Ausgabe:

Wie Sie sehen können, haben wir die Daten jetzt erfolgreich in unserer Datenbank.