Google'ın Cloud SQL ve App Engine'i Flask Kullanarak API Kurma

Yayınlanan: 2022-03-10
Hızlı özet ↬ Flask, geliştiricilerin sahip olabilecekleri herhangi bir kullanım durumu için bir API oluşturmasını mümkün kılar. Bu eğiticide, bir Flask API'si oluşturmak için Google Cloud, Cloud SQL ve App Engine'i nasıl kuracağımızı öğreneceğiz. (Cloud SQL, tam olarak yönetilen bir hizmet olarak platform (PaaS) veritabanı motorudur ve App Engine, uygulamaları barındırmak için tam olarak yönetilen bir PaaS'dir.)

API'ler oluşturmak için, ikisi Flask ve Django olmak üzere birkaç Python çerçevesi kullanılabilir. Çerçeveler, geliştiricilerin, kullanıcıların uygulamalarıyla etkileşim kurmak için ihtiyaç duyduğu özellikleri uygulamasını kolaylaştıran işlevsellik ile birlikte gelir. Bir web uygulamasının karmaşıklığı, hangi çerçeveyle çalışacağınızı seçerken belirleyici bir faktör olabilir.

Django

Django, yerleşik işlevselliğe sahip önceden tanımlanmış bir yapıya sahip sağlam bir çerçevedir. Ancak sağlamlığının dezavantajı, çerçeveyi belirli projeler için çok karmaşık hale getirebilmesidir. Django'nun gelişmiş işlevlerinden yararlanmaya ihtiyaç duyan karmaşık web uygulamaları için en uygunudur.

şişe

Flask ise API'ler oluşturmak için hafif bir çerçevedir. Başlamak kolaydır ve ilerledikçe sağlam hale getirmek için paketler mevcuttur. Bu makale, görünüm işlevlerini ve denetleyiciyi tanımlamaya ve Google Cloud'daki bir veritabanına bağlanmaya ve Google Cloud'a dağıtmaya odaklanacaktır.

Öğrenmek amacıyla, en sevdiğimiz şarkılardan oluşan bir koleksiyonu yönetmek için birkaç uç nokta içeren bir Flask API oluşturacağız. Uç noktalar, GET ve POST istekleri için olacaktır: kaynakları alma ve oluşturma. Bunun yanı sıra, Google Cloud platformundaki hizmet paketini kullanacağız. Veritabanımız için Google'ın Cloud SQL'ini ayarlayacağız ve App Engine'e dağıtarak uygulamamızı başlatacağız. Bu eğitici, uygulamaları için Google Cloud'u kullanmaya başlayan yeni başlayanlara yöneliktir.

Bir Flask Projesi Kurma

Bu öğretici, Python 3.x'in kurulu olduğunu varsayar. Bunu yapmazsanız, indirmek ve kurmak için resmi web sitesine gidin.

Python'un kurulu olup olmadığını kontrol etmek için komut satırı arabiriminizi (CLI) başlatın ve aşağıdaki komutu çalıştırın:

 python -V

İlk adımımız projemizin yaşayacağı dizini oluşturmak. Biz buna flask-app diyeceğiz:

 mkdir flask-app && cd flask-app

Python projesine başlarken yapılacak ilk şey sanal bir ortam oluşturmaktır. Sanal ortamlar, çalışan Python geliştirmenizi izole eder. Bu, bu projenin makinelerinizdeki diğer projelerden farklı olarak kendi bağımlılıklarına sahip olabileceği anlamına gelir. venv, Python 3 ile birlikte gelen bir modüldür.

Atlamadan sonra daha fazlası! Aşağıdan okumaya devam edin ↓

flask-app dizinimizde sanal bir ortam oluşturalım:

 python3 -m venv env

Bu komut, dizinimizde bir env klasörü oluşturur. Ad (bu durumda env ) sanal ortam için bir takma addır ve herhangi bir adla adlandırılabilir.

Artık sanal ortamı oluşturduğumuza göre projemize onu kullanmasını söylemeliyiz. Sanal ortamımızı etkinleştirmek için aşağıdaki komutu kullanın:

 source env/bin/activate

CLI isteminizin başında artık ortamımızın etkin olduğunu gösteren env olduğunu göreceksiniz.

Bir ortamın etkin olduğunu belirtmek için env istemini gösterir
(env) komut isteminden önce görünür (Büyük önizleme)

Şimdi Flask paketimizi kuralım:

 pip install flask

Mevcut dizinimizde api adında bir dizin oluşturun. Bu dizini, uygulamamızın diğer klasörlerinin bulunacağı bir klasörümüz olması için oluşturuyoruz.

 mkdir api && cd api

Ardından, uygulamamıza giriş noktası görevi görecek bir main.py dosyası oluşturun:

 touch main.py

main.py açın ve aşağıdaki kodu girin:

 #main.py from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'Hello World' if __name__ == '__main__': app.run()

Burada ne yaptığımızı anlayalım. Önce Flask paketinden Flask sınıfını import ettik. Ardından sınıfın bir örneğini oluşturduk ve onu app . Ardından, uygulamamızın kökünü gösteren ilk uç noktamızı oluşturduk. Özetle, bu / route'u çağıran bir görünüm işlevidir - Hello World döndürür.

Uygulamayı çalıştıralım:

 python main.py

Bu, yerel sunucumuzu başlatır ve https://127.0.0.1:5000/ uygulamamızı sunar. URL'yi tarayıcınıza girin ve ekranınızda yazdırılan Hello World yanıtını göreceksiniz.

Ve işte! Uygulamamız çalışıyor ve çalışıyor. Bir sonraki görev, onu işlevsel hale getirmektir.

Uç noktalarımızı çağırmak için geliştiricilerin uç noktaları test etmesine yardımcı olan bir hizmet olan Postman'ı kullanacağız. Resmi web sitesinden indirebilirsiniz.

main.py bazı verileri döndürmesini sağlayalım:

 #main.py from flask import Flask, jsonify app = Flask(__name__) songs = [ { "title": "Rockstar", "artist": "Dababy", "genre": "rap", }, { "title": "Say So", "artist": "Doja Cat", "genre": "Hiphop", }, { "title": "Panini", "artist": "Lil Nas X", "genre": "Hiphop" } ] @app.route('/songs') def home(): return jsonify(songs) if __name__ == '__main__': app.run()

Burada, şarkının adı ve sanatçının adı da dahil olmak üzere şarkıların bir listesini ekledik. Daha sonra kök / rotayı /songs olarak değiştirdik. Bu rota, belirttiğimiz şarkı dizisini döndürür. Listemizi JSON değeri olarak alabilmek için listeyi jsonify üzerinden geçirerek jsonify . Artık basit bir Hello world görmek yerine https://127.0.0.1:5000/songs uç noktasına eriştiğimizde sanatçıların bir listesini görüyoruz.

Bu resim, bir alma isteğinden gelen yanıtı gösterir.
get yanıt alma (Büyük önizleme)

Her değişiklikten sonra sunucumuzu yeniden başlatmamız gerektiğini fark etmişsinizdir. Kod değiştiğinde otomatik yeniden yüklemeyi etkinleştirmek için hata ayıklama seçeneğini etkinleştirelim. Bunu yapmak için app.run şekilde değiştirin:

 app.run(debug=True)

Ardından dizimize post request kullanarak bir şarkı ekleyelim. İlk olarak, kullanıcılarımızdan gelen talebi işleyebilmemiz için request nesnesini içe aktarın. Daha sonra JSON'da kullanıcının girdisini almak için request nesnesini görünüm işlevinde kullanacağız.

 #main.py from flask import Flask, jsonify, request app = Flask(__name__) songs = [ { "title": "Rockstar", "artist": "Dababy", "genre": "rap", }, { "title": "Say So", "artist": "Doja Cat", "genre": "Hiphop", }, { "title": "Panini", "artist": "Lil Nas X", "genre": "Hiphop" } ] @app.route('/songs') def home(): return jsonify(songs) @app.route('/songs', methods=['POST']) def add_songs(): song = request.get_json() songs.append(song) return jsonify(songs) if __name__ == '__main__': app.run(debug=True)

add_songs görüntüleme işlevimiz, kullanıcı tarafından gönderilen bir şarkıyı alır ve onu mevcut şarkı listemize ekler.

Bu resim, Postman kullanan bir gönderi isteğini göstermektedir.
Postacıdan istek gönderme (Büyük önizleme)

Şimdiye kadar verilerimizi bir Python listesinden döndürdük. Bu sadece deneyseldir, çünkü daha sağlam bir ortamda sunucuyu yeniden başlatırsak yeni eklenen verilerimiz kaybolacaktır. Bu mümkün değil, bu yüzden verileri depolamak ve almak için canlı bir veritabanına ihtiyacımız olacak. Cloud SQL geliyor.

Neden Bulut SQL Örneği Kullanmalısınız?

Resmi web sitesine göre:

“Google Cloud SQL, bulutta ilişkisel MySQL ve PostgreSQL veritabanlarınızı kurmayı, korumayı, yönetmeyi ve yönetmeyi kolaylaştıran, tam olarak yönetilen bir veritabanı hizmetidir. Google Cloud Platform'da barındırılan Cloud SQL, her yerde çalışan uygulamalar için bir veritabanı altyapısı sağlıyor."

Bu, bir veritabanının altyapısının yönetimini esnek bir fiyatla tamamen Google'a yaptırabileceğimiz anlamına gelir.

Cloud SQL ile Kendi Kendini Yöneten Bilgi İşlem Motoru Arasındaki Fark

Google Cloud'da, Google'ın Compute Engine altyapısında sanal bir makine çalıştırabilir ve SQL örneğimizi yükleyebiliriz. Bu, dikey ölçeklenebilirlik, çoğaltma ve bir dizi başka yapılandırmadan sorumlu olacağımız anlamına gelir. Cloud SQL ile birçok yapılandırmayı kullanıma hazır hale getiriyoruz, böylece kod üzerinde daha fazla ve kurulum için daha az zaman harcayabiliyoruz.

Başlamadan Önce:

  1. Google Cloud'a kaydolun. Google, yeni kullanıcılara 300 ABD doları tutarında ücretsiz kredi sunar.
  2. Bir proje oluşturun. Bu oldukça basittir ve doğrudan konsoldan yapılabilir.

Bir Bulut SQL Örneği Oluşturun

Google Cloud'a kaydolduktan sonra sol panelde “SQL” sekmesine gidin ve tıklayın.

Bu resim, GCP hizmetlerinin bir alt bölümünü göstermektedir
GCP hizmetlerinin anlık görüntüsü (Büyük önizleme)
Bu resim, Cloud SQL için sunulan üç veritabanı motorunu gösterir
Cloud SQL'in konsol sayfası (Büyük önizleme)

İlk önce bir SQL motoru seçmemiz gerekiyor. Bu makale için MySQL ile gideceğiz.

Bu resim, bir Cloud SQL örneği oluşturma sayfasını gösterir
Yeni bir Cloud SQL örneği oluşturma (Büyük önizleme)

Ardından, bir örnek oluşturacağız. Varsayılan olarak, örneğimiz ABD'de oluşturulacak ve bölge bizim için otomatik olarak seçilecektir.

Kök parolasını ayarlayın ve örneğe bir ad verin ve ardından “Oluştur” düğmesine tıklayın. "Yapılandırma seçeneklerini göster" açılır menüsünü tıklayarak örneği daha da yapılandırabilirsiniz. Ayarlar, örneğin boyutunu, depolama kapasitesini, güvenliğini, kullanılabilirliğini, yedeklerini ve daha fazlasını yapılandırmanıza olanak tanır. Bu makale için varsayılan ayarlarla gideceğiz. Endişelenmeyin, bu değişkenler daha sonra değiştirilebilir.

İşlemin tamamlanması birkaç dakika sürebilir. Yeşil bir onay işareti gördüğünüzde örneğin hazır olduğunu bileceksiniz. Ayrıntılar sayfasına gitmek için örneğinizin adına tıklayın.

Şimdi, çalışmaya başladığımıza göre, birkaç şey yapacağız:

  1. Bir veritabanı oluşturun.
  2. Yeni bir kullanıcı oluşturun.
  3. IP adresimizi beyaz listeye alın.

Veritabanı Oluştur

Bir veritabanı oluşturmak için "Veritabanı" sekmesine gidin.

Bu resim, Cloud SQL'de yeni bir kullanıcının oluşturulmasını gösterir
Cloud SQL'de yeni bir veritabanı oluşturma (Büyük önizleme)

Yeni Bir Kullanıcı Oluştur

Cloud SQL'de yeni bir kullanıcı oluşturma (Geniş önizleme)

"Ana bilgisayar adı" bölümünde, "% (herhangi bir ana bilgisayar)"a izin verecek şekilde ayarlayın.

Beyaz Liste IP Adresi

Veritabanı örneğinize iki yoldan biriyle bağlanabilirsiniz. Özel bir IP adresi, bir sanal özel bulut (VPC) gerektirir. Bu seçeneği seçerseniz Google Cloud, Google tarafından yönetilen bir VPC oluşturacak ve örneğinizi buna yerleştirecektir. Bu yazı için varsayılan olan genel IP adresini kullanacağız. Yalnızca IP adresleri beyaz listeye alınmış kişilerin veritabanına erişebileceği anlamında herkese açıktır.

IP adresinizi beyaz listeye almak için, IP'nizi almak için bir Google aramasına my ip yazın. Ardından, "Bağlantılar" sekmesine ve "Ağ Ekle"ye gidin.

Bu resim, IP beyaz listeye alma sayfasını gösterir
IP adresinizi beyaz listeye alın (Geniş önizleme)

Örneğe Bağlan

Ardından, "Genel Bakış" paneline gidin ve bulut kabuğunu kullanarak bağlanın.

Bu resim, Cloud SQL kontrol panelini gösterir
Cloud SQL kontrol paneli (Geniş önizleme)

Cloud SQL örneğimize bağlanma komutu konsolda önceden yazılacaktır.

Kök kullanıcıyı veya daha önce oluşturulmuş kullanıcıyı kullanabilirsiniz. Aşağıdaki komutta şunu söylüyoruz: flask-demo örneğine USERNAME kullanıcısı olarak bağlanın. Kullanıcının şifresini girmeniz istenecektir.

 gcloud sql connect flask-demo --user=USERNAME

Proje kimliğiniz olmadığını söyleyen bir hata alırsanız, şunu çalıştırarak projenizin kimliğini alabilirsiniz:

 gcloud projects list

Yukarıdaki komuttan çıkarılan proje kimliğini alın ve PROJECT_ID ile değiştirerek aşağıdaki komuta girin.

 gcloud config set project PROJECT_ID

Ardından gcloud sql connect komutunu çalıştırın, bağlanacağız.

Aktif veritabanlarını görmek için bu komutu çalıştırın:

 > show databases; 
Bu görüntü, bulut kabuğunda gösteri veritabanlarını çalıştırdığımız zaman için kabuk çıktısını gösterir.
"Veritabanlarını göster" için kabuk çıktısı (Geniş önizleme)

Veritabanımın adı db_demo ve db_demo veritabanını kullanmak için aşağıdaki komutu çalıştıracağım. information_schema ve performance_schema gibi bazı diğer veritabanlarını görebilirsiniz. Bunlar, tablo meta verilerini depolamak için vardır.

 > use db_demo;

Ardından, Flask uygulamamızdan listeyi yansıtan bir tablo oluşturun. Aşağıdaki kodu bir not defterine yazın ve bulut kabuğunuza yapıştırın:

 create table songs( song_id INT NOT NULL AUTO_INCREMENT, title VARCHAR(255), artist VARCHAR(255), genre VARCHAR(255), PRIMARY KEY(song_id) );

Bu kod, dört sütunlu ( song_id , title , artist ve genre ) songs adlı bir tablo oluşturan bir SQL komutudur. Ayrıca tablonun song_id birincil anahtar olarak tanımlaması ve 1'den itibaren otomatik olarak artırması talimatını verdik.

Şimdi show tables; Tablonun oluşturulduğunu onaylamak için

Bu görüntü, bulut kabuğunda gösteri tablolarını çalıştırdığımızda kabuk çıktısını gösterir.
"Tabloları göster" için kabuk çıktısı (Büyük önizleme)

Ve aynen böyle bir veri tabanı ve songs tablomuzu oluşturduk.

Bir sonraki görevimiz, uygulamamızı dağıtabilmemiz için Google App Engine'i kurmak.

Google Uygulama Motoru

App Engine, geniş ölçekte web uygulamaları geliştirmek ve barındırmak için tam olarak yönetilen bir platformdur. App Engine'e dağıtmanın bir avantajı, bir uygulamanın gelen trafiği karşılamak için otomatik olarak ölçeklenmesini sağlamasıdır.

App Engine web sitesinde şöyle yazıyor:

"Sıfır sunucu yönetimi ve sıfır yapılandırma dağıtımları ile geliştiriciler, yönetim yükü olmadan yalnızca harika uygulamalar oluşturmaya odaklanabilir."

App Engine'i Kur

App Engine'i kurmanın birkaç yolu vardır: Google Cloud Console'un kullanıcı arayüzü veya Google Cloud SDK aracılığıyla. Bu bölüm için SDK kullanacağız. Google Cloud örneğimizi yerel makinemizden dağıtmamıza, yönetmemize ve izlememize olanak tanır.

Google Cloud SDK'yı yükleyin

Mac veya Windows için SDK'yı indirmek ve kurmak için talimatları izleyin. Kılavuz ayrıca CLI'nizde SDK'yı nasıl başlatacağınızı ve bir Google Cloud projesini nasıl seçeceğinizi gösterecektir.

SDK yüklendiğine göre, Python komut dosyamızı veritabanımızın kimlik bilgileriyle güncelleyeceğiz ve App Engine'e dağıtacağız.

Yerel Kurulum

Yerel ortamımızda, kurulumu Cloud SQL ve App Engine'i içeren yeni mimarimize uyacak şekilde güncelleyeceğiz.

Öncelikle kök klasörümüze bir app.yaml dosyası ekleyin. Bu, App Engine'in uygulamamızı barındırması ve çalıştırması için ihtiyaç duyduğu bir yapılandırma dosyasıdır. App Engine'e çalışma zamanımızı ve gerekli olabilecek diğer değişkenleri bildirir. Uygulamamız için, App Engine'in veritabanımızın örneğinden haberdar olması için veritabanımızın kimlik bilgilerini ortam değişkenleri olarak eklememiz gerekecek.

app.yaml dosyasında aşağıdaki parçacığı ekleyin. Veritabanını kurarken çalışma zamanı ve veritabanı değişkenlerini almış olacaksınız. Değerleri, Cloud SQL'i kurarken kullandığınız kullanıcı adı, şifre, veritabanı adı ve bağlantı adıyla değiştirin.

 #app.yaml runtime: python37 env_variables: CLOUD_SQL_USERNAME: YOUR-DB-USERNAME CLOUD_SQL_PASSWORD: YOUR-DB-PASSWORD CLOUD_SQL_DATABASE_NAME: YOUR-DB-NAME CLOUD_SQL_CONNECTION_NAME: YOUR-CONN-NAME

Şimdi PyMySQL kurulumu yapacağız. Bu, bir MySQL veritabanına bağlanan ve sorgular gerçekleştiren bir Python MySQL paketidir. CLI'nizde bu satırı çalıştırarak PyMySQL paketini kurun:

 pip install pymysql

Bu noktada, uygulamadan Cloud SQL veritabanımıza bağlanmak için PyMySQL kullanmaya hazırız. Bu, veritabanımıza sorguları almamızı ve eklememizi sağlayacaktır.

Veritabanı Bağlayıcısını Başlat

Öncelikle kök klasörümüzde bir db.py dosyası oluşturun ve aşağıdaki kodu ekleyin:

 #db.py import os import pymysql from flask import jsonify db_user = os.environ.get('CLOUD_SQL_USERNAME') db_password = os.environ.get('CLOUD_SQL_PASSWORD') db_name = os.environ.get('CLOUD_SQL_DATABASE_NAME') db_connection_name = os.environ.get('CLOUD_SQL_CONNECTION_NAME') def open_connection(): unix_socket = '/cloudsql/{}'.format(db_connection_name) try: if os.environ.get('GAE_ENV') == 'standard': conn = pymysql.connect(user=db_user, password=db_password, unix_socket=unix_socket, db=db_name, cursorclass=pymysql.cursors.DictCursor ) except pymysql.MySQLError as e: print(e) return conn def get_songs(): conn = open_connection() with conn.cursor() as cursor: result = cursor.execute('SELECT * FROM songs;') songs = cursor.fetchall() if result > 0: got_songs = jsonify(songs) else: got_songs = 'No Songs in DB' conn.close() return got_songs def add_songs(song): conn = open_connection() with conn.cursor() as cursor: cursor.execute('INSERT INTO songs (title, artist, genre) VALUES(%s, %s, %s)', (song["title"], song["artist"], song["genre"])) conn.commit() conn.close()

Burada birkaç şey yaptık.

Öncelikle app.yaml dosyasından os.environ.get yöntemini kullanarak veritabanı kimlik bilgilerimizi aldık. App Engine, app.yaml içinde tanımlanan ortam değişkenlerini uygulamada kullanılabilir hale getirebilir.

İkinci olarak, bir open_connection işlevi oluşturduk. Kimlik bilgileriyle MySQL veritabanımıza bağlanır.

Üçüncü olarak, iki fonksiyon ekledik: get_songs ve add_songs . İlki, open_connection işlevini çağırarak veritabanına bir bağlantı başlatır. Ardından her satır için songs tablosunu sorgular ve boşsa “DB'de Şarkı Yok” döndürür. add_songs işlevi, songs tablosuna yeni bir kayıt ekler.

Son olarak, başladığımız yere, main.py dosyamıza dönüyoruz. Şimdi, daha önce yaptığımız gibi şarkılarımızı bir nesneden almak yerine, bir kayıt eklemek için add_songs işlevini çağırıyoruz ve kayıtları veritabanından almak için get_songs işlevini çağırıyoruz.

main.py yeniden düzenleyelim:

 #main.py from flask import Flask, jsonify, request from db import get_songs, add_songs app = Flask(__name__) @app.route('/', methods=['POST', 'GET']) def songs(): if request.method == 'POST': if not request.is_json: return jsonify({"msg": "Missing JSON in request"}), 400 add_songs(request.get_json()) return 'Song Added' return get_songs() if __name__ == '__main__': app.run()

get_songs ve add_songs fonksiyonlarını içe aktardık ve onları song songs() görüntüleme fonksiyonumuzda çağırdık. Bir post isteği add_songs işlevini çağırırız ve bir get isteği get_songs işlevini çağırırız.

Ve uygulamamız bitti.

Sırada bir requirements.txt dosyası eklemek var. Bu dosya, uygulamayı çalıştırmak için gerekli olan paketlerin bir listesini içerir. App Engine bu dosyayı kontrol eder ve listelenen paketleri yükler.

 pip freeze | grep "Flask\|PyMySQL" > requirements.txt

Bu satır, uygulama için kullandığımız iki paketi (Flask ve PyMySQL) alır, bir requirements.txt dosyası oluşturur ve paketleri ve sürümlerini dosyaya ekler.

Bu noktada, üç yeni dosya ekledik: db.py , app.yaml ve requirements.txt .

Google App Engine'e dağıtın

Uygulamanızı dağıtmak için aşağıdaki komutu çalıştırın:

 gcloud app deploy

İyi giderse, konsolunuz şunu çıkarır:

Bu görüntü, App Engine'e dağıtırken çıktıyı gösterir
App Engine dağıtımı için CLI çıktısı (Geniş önizleme)

Uygulamanız artık App Engine'de çalışıyor. Tarayıcıda görmek için gcloud app browse .

Gönderimizi test etmek ve istek get için post başlatabiliriz.

Bu görüntü, dağıtılan uygulamamıza gönderilen bir isteği gösterir
Gönderi isteğini gösterme (Büyük önizleme)
Bu görüntü, dağıtılan uygulamamıza bir alma isteğini gösterir
Bir get isteği gösterme (Büyük önizleme)

Uygulamamız artık Google'ın altyapısında barındırılıyor ve sunucusuz bir mimarinin tüm avantajlarından yararlanmak için yapılandırmada ince ayar yapabiliyoruz. İleriye dönük olarak, sunucusuz uygulamanızı daha sağlam hale getirmek için bu makaleyi geliştirebilirsiniz.

Çözüm

App Engine ve Cloud SQL gibi bir hizmet olarak platform (PaaS) altyapısı kullanmak, temel olarak altyapı düzeyini soyutlar ve daha hızlı oluşturmamızı sağlar. Geliştiriciler olarak, yapılandırma, yedekleme ve geri yükleme, işletim sistemi, otomatik ölçeklendirme, güvenlik duvarları, geçiş trafiği vb. hakkında endişelenmemize gerek yok. Ancak, temel yapılandırma üzerinde denetime ihtiyacınız varsa, özel olarak oluşturulmuş bir hizmet kullanmak daha iyi olabilir.

Referanslar

  • “Python'u İndirin”
  • “venv — Sanal Ortamların Oluşturulması”, Python (belgeler)
  • “Postacı İndir”
  • "Bulut SQL", Google Cloud
  • Google Bulut
  • "Google Cloud Ücretsiz Katmanı", Google Cloud
  • "Proje Oluşturma ve Yönetme", Google Cloud
  • "VPC'ye Genel Bakış" (sanal özel bulut), Google Cloud
  • "Uygulama Motoru", Google Bulut
  • "Hızlı Başlangıçlar" (Google Cloud SDK'yı indirin), Google Cloud
  • PyMySQL belgeleri