我有一个flask应用,使用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”数据库中有一个“用户”表,该表已经填充了几百行。 现在,我需要导入此现有表,而不是首先使用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命令,而不是flask-sqlchemy,所以我对此并不完全理解。
我必须像第一次创建表一样首先定义用户表:
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
只有这样,我才能使用USERS通过flask-sqlalchemy查询数据库
如何在flask应用程序中使用flask-sqlchemy访问现有表用户?
答案 0 :(得分:0)
在sqlalchemy中,如果要查询Table()
,则应查询带有会话的表。因为'Table' object has no attribute 'query'
。并且您无需创建表(如果已存在),只需使用它即可。 sqlalchemy existing database query
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
'''