pgAdmin не может найти записи, в то время как SQLAlchemy делает - PullRequest
0 голосов
/ 23 января 2019

pgAdmin не находит записи в таблице пользователей, в то время как SQLAlchemy делает. У меня есть веб-приложение, которое хранит учетные данные пользователя в базе данных AWS postgres. Приложение работает отлично. Выбор * из postgres возвращает имя таблицы, но никаких записей. При подключении через SQLalchemy я получаю ожидаемые результаты.

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

Этот запрос дает все таблицы:

SELECT table_name
FROM information_schema.tables
WHERE table_schema='public'
AND table_type='BASE TABLE';

Результаты:

users
post
user

Этот запрос не работает:

SELECT * FROM users;

Результаты:

id | username | email | password
---------------------------------
(Blank)

SQLAlchemy:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import postgresUser, postgresPass
from datetime import datetime

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


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, 
    default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)


class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, 
default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), 
    nullable=False)

users = User.query.all()

for user in users:
    print(user.email) for

Дает ожидаемые результаты:

 jimbo@mail.com
 jane@mail.com

Я не знаю, почему SQLAchemy может его найти, а pgAdmin - нет. Другие запросы для таблицы сообщений, кажется, работают.

Использование: Flask, SQLAlchemy, AWS postgres. Бег на локальной машине.

1 Ответ

0 голосов
/ 26 января 2019

Решено: Проблема в том, что SQLAlchemy создает таблицу с именем «user» из класса «User».Пользователь является зарезервированной таблицей в Postgres.В pgAdmin я вижу только одну пользовательскую таблицу на боковой панели.Моя таблица пользователей доступна через запрос, добавив двойные кавычки.SELECT * FROM "user";

Не используйте класс SQLAlchemy User или user для postgres.Я переименовал свой класс Users.Надеюсь, что это помогает другим.

...