Python SQLAlchemy带烧瓶罐';无法连接到数据库以进行原始SQL查询?

Python SQLAlchemy带烧瓶罐';无法连接到数据库以进行原始SQL查询?,python,postgresql,flask,sqlalchemy,flask-sqlalchemy,Python,Postgresql,Flask,Sqlalchemy,Flask Sqlalchemy,我正在使用Flask和SQLAlchemy进行一个项目。我已经成功地创建了我的数据库并用数据填充它。现在我正在使用蓝图研究API端点。但是,我想在这里使用原始SQL查询,而不是SQLAlchemy提供的ORM(这是项目的一个要求)。但是,当我从db对象检索引擎并运行查询时,它访问了错误的数据库,结果返回了错误的数据。它访问的数据库实际上是默认的postgres数据库,有一个名为users的关系和一个名为postgres的用户 但是,当我使用ORM运行查询时,它会访问正确的数据库并执行正确的查询。

我正在使用Flask和SQLAlchemy进行一个项目。我已经成功地创建了我的数据库并用数据填充它。现在我正在使用蓝图研究API端点。但是,我想在这里使用原始SQL查询,而不是SQLAlchemy提供的ORM(这是项目的一个要求)。但是,当我从db对象检索引擎并运行查询时,它访问了错误的数据库,结果返回了错误的数据。它访问的数据库实际上是默认的postgres数据库,有一个名为users的关系和一个名为postgres的用户

但是,当我使用ORM运行查询时,它会访问正确的数据库并执行正确的查询。我已经研究了一段时间了,还没有找到任何答案。这是我的项目的目录结构

.
├── api
│   ├── __init__.py
│   ├── models.py
│   └── views
│       ├── auth.py
│       └── users.py
├── db_create.py
├── db_drop.py
├── manager.py
├── populate.py
├── README.md
以下是不工作的users.py文件:

import json
from api import app, db
from api.models import User
from flask import Blueprint, request
from flask import jsonify
import api

mod = Blueprint('users', __name__)

engine = db.engine
conn = engine.connect()

@mod.route('/users')
def get_all_users():
    result = conn.execute("SELECT * FROM user")
    users  = []
    for row in result:
        user = {}
        for key in row.keys():
            user[key] = row[key]
        users.append(user)
    return jsonify({'users' : users})
下面是working users.py:

import json
from api import app, db
from api.models import User
from flask import Blueprint, request
from flask import jsonify
import api

mod = Blueprint('users', __name__)

engine = db.engine
conn = engine.connect()

@mod.route('/users')
def get_all_users():
    users = db.session.query(User).all()
    users_arr = []
    for user in users:
        user_dict = {}
        user_dict["email"] = user.email
        user_dict["username"] = user.username
        user_dict["password"] = user.password
        user_dict["name"] = user.name
        user_dict["latitude"] = user.latitude
        user_dict["longitude"] = user.longitude
        users_arr.append(user_dict)
    return jsonify({'users' : users_arr})
我在models.py中定义了我的数据库模型,我使用这种(非常粗糙的)方式在DB_create.py中实例化数据库:

from api import db

db.create_all()
db.session.commit()
以下是api目录中的myinit.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from flask_login import LoginManager, login_required
import os

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://postgres:postgres@localhost/mydbname"

db = SQLAlchemy(app)

from api import models

# import and register blueprints
from api.views import users
app.register_blueprint(users.mod)
即使当我尝试从psql访问用户关系时,它也不起作用。它返回一个1元组,用户为postgres。然而,从psql访问其他关系可以很好地工作(我认为这表明它们可以很好地用于SQLAlchemy中的原始SQL)

psql CLI的Pastebin:

但是,如果我通过DataGrip之类的方法检查数据库,它会正确地报告用户关系并正确地显示数据


用户是Postgres中的关键字。要正确访问该关系,请将其括起来。

在本例中,这是一个很好的代码示例,值得学习。@sytech在发布本文之前,我已经通读过了。我的问题不是它无法执行查询,而是它在一个完全不同的数据库上执行查询。当我到达端点时,我得到的是json:{“users”:[{“user”:“postgres”}]}那么您使用的是多个数据库?请使用您的设置和创建
db
对象的db文件更新您的问题。另请注意,解决方案使用的是
db.engine.execute
而不是
db.engine.connect().execute
,这正是您所拥有的,尽管我认为这与您的问题没有直接关系。@sytech编辑了我的ppost。我没有使用多个数据库,我只是让SQLAlchemy连接到数据库,然后创建关系。编辑:忽略。我最近键入的关于无法在psql中看到它的内容。@sytech,刚刚发现错误。