Подключение к google-sql с гибким движком Python3 через Flask / SQLAlchemy - PullRequest
0 голосов
/ 12 декабря 2018

Я обновил свой движок приложений до flexible и сейчас выполняю рефакторинг кода.Я не работал с Flask кроме как в standard и не использовал SQLAlchemy.Я настроил свои базы данных и имел действующие, работающие соединения раньше в standard среде.Я сейчас пытаюсь выполнить простой SQL в Python3 flexible environment:

SELECT id, latitude, longitude FROM weatherData

Теперь у меня есть действительное соединение с базой данных через следующее:

    app = Flask(__name__)
    app.config['WEATHER_DATABASE_URI'] = os.environ['WEATHER_DATABASE_URI']
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    db = SQLAlchemy(app)

Соответствующие переменные средынаходятся в моем app.yaml файле.

Я понимаю, что SQLAlchemy использует ORM, но во всех примерах, которые я видел, они создали класс в качестве «буфера» между клиентом и базой данных, чтобы сначала создать таблицу, а затем выполнить операции CRUD.Например,

engine = create_engine('sqlite:///student.db', echo=True)
Base = declarative_base()

class Student(Base):
""""""
__tablename__ = "student"

id = Column(Integer, primary_key=True)
username = Column(String)
firstname = Column(String)
lastname = Column(String)
university = Column(String)

#----------------------------------------------------------------------
def __init__(self, username, firstname, lastname, university):
    """"""
    self.username = username
    self.firstname = firstname
    self.lastname = lastname
    self.university = university

 # create tables
 Base.metadata.create_all(engine)

Я заметил, что в этом случае они используют engine, что мне не кажется актуальным.Короче говоря, как я могу выполнить вышеупомянутый SQL-запрос?

Спасибо:)

1 Ответ

0 голосов
/ 13 декабря 2018

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

db = sqlalchemy.create_engine(
    # Equivalent URL:
    # mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>
    sqlalchemy.engine.url.URL(
        drivername='mysql+pymysql',
        username=db_user,
        password=db_pass,
        database=db_name,
        query={
            'unix_socket': '/cloudsql/{}'.format(cloud_sql_instance_name)
        }
    )
}

Во-вторых, вы используете механизм для получения соединения с экземпляром и выполняете свои действия:

with db.connect() as conn:
     recent_votes = conn.execute(
            "SELECT candidate, time_cast FROM votes "
            "ORDER BY time_cast DESC LIMIT 5"
     ).fetchall()

Этопозволяет SQLAlchemy более эффективно управлять вашими соединениями.Если вы хотите увидеть эти фрагменты в контексте приложения, взгляните на это пример приложения .

...