Запрос существующей таблицы mysql в базе данных с использованием flask-sqlalchemy - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть приложение фляги, использующее flask-slqalchemy для запроса базы данных mysql

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost/abc'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

В базе данных abc есть таблица «users», и она уже заполнена несколькими сотнями строк.Теперь мне нужно импортировать эту существующую таблицу, а не сначала определять ее с помощью db.Model. Как мне вызвать таблицу?если я сделаю это

from sqlalchemy import Table
USERS = Table('users', db.metadata,autoload=True, autoload_with=db.engine)

, то я не смогу сделать запрос, подобный

USERS.query.filter_by(done=1).with_entities(USERS.name,USERS.country).paginate(page, 15, False)

, он выдаст ошибку

AttributeError: 'Table' object has no attribute 'query'

, потому что это команда sqlchemyЯ не до конца понимаю.

Я должен сначала определить таблицу USERS, как будто я создаю ее впервые:

class USERS(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.VARCHAR(500))
    country = db.Column(db.VARCHAR(50))

    def __init__(self, id, name, country):
        self.id = id
        self.name = name
        self.country = country

    def __repr__(self):
    return self.id

только тогда я смогуиспользовать ПОЛЬЗОВАТЕЛИ для запроса к базе данных с помощью flask-sqlalchemy

Как получить доступ к существующим пользователям таблиц с помощью flask-sqlchemy в приложении с флягами?

1 Ответ

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

В sqlalchemy вы должны запросить таблицы (таблицы) с сеансом, если вы хотите запросить Table().Потому что 'Table' object has no attribute 'query'.И вам не нужно создавать таблицу, если она существует, просто используйте ее. sqlalchemy существующий запрос к базе данных

from sqlalchemy import Table, Column, String, create_engine, MetaData
from sqlalchemy.orm import sessionmaker

engine = create_engine()

metadata = MetaData()
test_ = Table('test', metadata,
    Column('msg', String, primary_key=True),
    Column('msg_', String)
)
Session = sessionmaker(bind=engine)
session = Session()
print(session.query(test_).filter_by(msg_ = "test").with_entities("msg","msg_").one())
# ('t', 'test')

В flask_sqlalchemy он почти такой же, как sqlalchemy.

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = ""
db = SQLAlchemy(app)


class test(db.Model):
    msg = db.Column(db.String, primary_key=True)
    msg_ = db.Column(db.String)

    def __init__(self, msg, msg_):
        self.msg = msg
        self.msg_ = msg_

    def __repr__(self):
        return "msg: {} msg_: {}".format(self.msg,self.msg_)

result = test.query.filter_by(msg_="test").one()
print(result)
print(result.msg,result.msg_)
'''
msg: t msg_: test
t test
'''
...