Google Cloud Flask SQL

Я разрабатываю веб-сайт, чтобы сделать собственное портфолио. Я хотел перейти на облачный сервис Google. Я получил свое приложение и базу данных. Я могу подключиться через ip, но если другой экземпляр создает, ip должен быть сначала занесен в белый список.

URL-адрес SQLAlchemly - это то, что я видел, было ответом. Но я хочу продолжать работать с peewee, если это возможно.

Может ли кто-нибудь объяснить мне, почему мой код не подключается из движка приложения к облачному sql.

Мой код

    """Main script for the blog website."""
from flask import Flask
from peewee import *
from livereload import Server, shell
from flask_uploads import UploadSet, IMAGES, configure_uploads
from flask_login import LoginManager, login_user
from jinja2 import Environment
import os
from playhouse.db_url import connect
import pymysql

# db = connect(host='127.0.0.1', port=3306, user='root', password='fakepassword')
# db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='fakepassword')
try:
    db = connect('sqlite:///root:fakepassword@/DATABASE?unix_socket=/cloudsql/austinbakkerblog:us-west1:database')
except Exception:
    print('did not connect to database')
# 'mysql+mysqldb://%s:%s@/blog?unix_socket=/cloudsql/%s'


app = Flask(__name__)
app.config.from_pyfile('config.py', silent=False)
DEBUG = app.debug


# db = MySQLDatabase('database')
# db.connect()

# db = connect('mysql://root:[email protected]:3306/database')
# db = connect('mysql://root:fakepassword@/DATABASE?unix_socket=/cloudsql/austinbakkerblog:us-west1:database')
# db = connect('mysql://root:fakepassword@/cloudsql/austinbakkerblog:us-west1:database')
# db = connect('mysql://root:fakepassword@cloudsql/austinbakkerblog:us-west1:database')
# print(db.connect())


login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'


photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)

import models
from views import *


    if __name__ == '__main__':
        models.initialize()
        print('=' * 100)
        app.run()

Если кто-то готов помочь, это было бы потрясающе, я трачу последний день, пытаясь заставить это работать, но безуспешно.

Не совсем понятно, о чем ваша установка, но я предполагаю, что вы пытаетесь установить соединение между вашим экземпляром App Engine и экземпляром CloudSQL. Есть несколько способов реализовать такие соединения, включая использование Сервисный аккаунт или использование Прокси-сервер Cloud SQL. Вы пробовали эти методы?

oakinlaja 22.05.2018 00:23

Я попробовал оба варианта, но не смог заставить их работать. Мне было интересно, есть ли у вас пример с малышкой, или вы могли бы помочь мне его сформулировать, потому что у меня ничего не получается. @oakinlaja

austin 22.05.2018 13:16
db = MySQLDatabase('database', user='root', password='##############', host='35.233.225.232', port=3306) Я могу использовать это для подключения, но затем мне нужно внести экземпляр в белый список. Я, но это означает, что мое приложение не будет хорошо масштабироваться
austin 22.05.2018 15:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
1 506
2

Ответы 2

Вместо того, чтобы использовать URL-адрес подключения, отладку может быть проще, если вы просто настроите соединение с базой данных напрямую.

Например,

db = MySQLDatabase('db_name', user='root', password='dbpassword',
                   host='googlecloud.whatever.com', port=31337)

Можно заставить pymysql подключиться?

если бы я сделал это, мне все равно пришлось бы занести в белый список IP-адрес, с которого он исходит, не так ли?

austin 22.05.2018 13:13
db = MySQLDatabase('database', user='root', password='##############', host='35.233.225.232', port=3306) Я заставил это работать. Но проблема не в том, что мне нужно заносить в белый список каждый экземпляр на моем sql.
austin 22.05.2018 15:24

Предположительно, вам придется занести их в белый список независимо от того, какую клиентскую библиотеку вы используете? то есть соединение - это соединение, будь то peewee, sqlalchemy, jdbc ...?

coleifer 22.05.2018 21:24

В облачном сервисе Google все движки приложений Google имеют доступ к нему без добавления в белый список. Итак, если я уверен, что IP-адрес, я перенаправляю соединение, пока это не нужно.

austin 22.05.2018 22:19

Итак, после нескольких дней измельчения я заставил его работать. Не уверен, как именно, но это

app.yaml

works. runtime: python
env: flex
entrypoint: gunicorn -b :$PORT app:app

runtime_config:
    python_version: 3


env_variables:

    SQL_USER: root
    SQL_PASSWORD: test
    SQL_DATABASE: database
    INSTANCE_CONNECTION_NAME: austinbakkerblog:europe-west2:mydatabase1


beta_settings:
    cloud_sql_instances: "austinbakkerblog:europe-west2:mydatabase1"

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 2
  cpu_utilization:
    target_utilization: 0.5

app.py

"""Main script for the blog's website."""
from flask import Flask
from peewee import *
from livereload import Server, shell
from flask_uploads import UploadSet, IMAGES, configure_uploads
from flask_login import LoginManager, login_user
from jinja2 import Environment
import os
import pymysql


db = MySQLDatabase(host='127.0.0.1', user='root', password='test', unix_socket='/cloudsql/austinbakkerblog:europe-west2:mydatabase1', database='database')

print(db.connect())
print(db.close())

Рад слышать, что ты разблокирован.

coleifer 23.05.2018 18:47

Другие вопросы по теме