Невозможно создать базу данных с python для приложения flask -graphql-postgress - PullRequest
0 голосов
/ 10 июля 2020

Когда я набираю: db.session.commit ()

Это ошибка, которую я получаю.

Traceback (последний вызов последний): File "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ engine \ base.py ", строка 1277, в _execute_context self.dialect.do_execute (File" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ engine \ default.py ", строка 593, в do_execute cursor.execute (оператор, параметры) psycopg2.errors.UndefinedTable: отношения "пользователи" не существует СТРОКА 1: INSERT INTO users (имя пользователя, электронная почта) VALUES ('postgres', 'shr ... ^

Вышеупомянутое исключение явилось прямой причиной следующего исключения:

Traceback (последний вызов последним): файл "", строка 1, в файле "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ scoping.py ", строка 163, при этом return getattr (self.registry (), name) (* args, ** kwargs) File" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ session.py ", l ine 1042, в файле commit self.transaction.commit () "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ session.py", строка 504, в коммите self._prepare_impl () File "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ session.py", строка 483 , в файле _prepare_impl self.session.flu sh () "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ session.py" , строка 2523, на удалении self._flu sh (объекты) Файл "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ session. py ", строка 2664, в flush transaction.rollback ( capture_exception = True) File" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ util \ langhelpers.py ", строка 68, в exit compat.raise (Файл" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ util \ compat.py ", строка 178, в строке повышения файл исключения повышения" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ session.py ", строка 2624, в файле _flush flush_context.execute ()" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site- пакеты \ sqlalchemy \ orm \ unitofwork.py ", строка 422, при выполнении re c .execute (self) File" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ unitofwork.py ", строка 586, в execute persistence.save_obj (Файл" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ persistence.py ", строка 239, в save_obj _emit_insert_statements (Файл" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ orm \ persistence.py ", строка 1135, в _emit_insert_statements result = cached_connections [connection] .execute (Файл" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ engine \ base.py ", строка 1014, при выполнении return meth (self, multiparams, params) File" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ sql \ elements.py ", строка 298, в _execute_on_con nection return connection._execute_clauseelement (self, multiparams, params) Файл "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ engine \ base.py", строка 1127, в _execute_clauseelement ret = self._execute_context (Файл "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ engine \ base.py", строка 1317, в _execute_context self. handle_dbapi_exception (Файл "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ engine \ base.py", строка 1511, в handle_dbapi_exception util.raise (Файл "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ util \ compat.py ", строка 178, в строке повышения исключение файла повышения" C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ engine \ base.py ", строка 1277 в _execute_context self.dialect. do_execute (Файл "C: \ Users \ shrut \ postgres - flask -graphql \ env \ lib \ site-packages \ sqlalchemy \ engine \ default.py", строка 593, в do_execute cursor.execute (инструкция , параметры) sqlalchemy.ex c .ProgrammingError: (psycopg2.errors.UndefinedTable) отношение «пользователи» не существует СТРОКА 1: ВСТАВИТЬ пользователей (имя пользователя, адрес электронной почты) VALUES ('postgres', 'shr ... ^

[SQL: ВСТАВИТЬ пользователей (имя пользователя, электронная почта) ЗНАЧЕНИЯ (% (имя пользователя) s,% (электронная почта) s) ВОЗВРАЩЕНИЕ users.id] [параметры: {'имя пользователя': 'postgres ',' email ':' shruti1.malik. ramaswamy@gmail.com '}] (Справочная информация об этой ошибке: http://sqlalche.me/e/13/f405)

Мой код app.py:

# Imports
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import graphene
from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField
from flask_graphql import GraphQLView

# initializing our app
app = Flask(__name__)
app.debug = True

# Configs
# Replace the user, password, hostname and database according to your configuration information
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:omega123@localhost:5432/book-store-api'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True 

# Modules
db = SQLAlchemy(app)

# Models
class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, index=True)
    email = db.Column(db.String(120), unique=True, nullable=False)
    books = db.relationship('Book', backref='author')

    def __init__(self, username, email):
      self.username = username
      self.email = email

    def __repr__(self):
        return '<User %r>' % self.id

class Book(db.Model):
    __tablename__ = 'books'

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(256), index=True, nullable=False)
    description = db.Column(db.Text, nullable=False)
    year = db.Column(db.Integer, nullable=False)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    def __repr__(self):
        return '<Book %r>' % self.title % self.description % self.year % self.author_id

# Schema Objects
class BookObject(SQLAlchemyObjectType):
    class Meta:
        model = Book
        interfaces = (graphene.relay.Node, )
class UserObject(SQLAlchemyObjectType):
   class Meta:
       model = User
       interfaces = (graphene.relay.Node, )

class Query(graphene.ObjectType):
    node = graphene.relay.Node.Field()
    all_books = SQLAlchemyConnectionField(BookObject)
    all_users = SQLAlchemyConnectionField(UserObject)

schema = graphene.Schema(query=Query)

class AddBook(graphene.Mutation):
    class Arguments:
        title = graphene.String(required=True)
        description = graphene.String(required=True) 
        year = graphene.Int(required=True) 
        username = graphene.String(required=True)
    book = graphene.Field(lambda: BookObject)

    def mutate(self, info, title, description, year, username):
        user = User.query.filter_by(username=username).first()
        book = Book(title=title, description=description, year=year)
        if user is not None:
            book.author = user
        db.session.add(book)
        db.session.commit()
        return AddBook(book=book)

class Mutation(graphene.ObjectType):
    add_book = AddBook.Field()
schema = graphene.Schema(query=Query, mutation=Mutation)


# Routes
app.add_url_rule(
    '/graphql-api',
    view_func=GraphQLView.as_view(
        'graphql',
        schema=schema,
        graphiql=True # for having the GraphiQL interface
    )
)

@app.route('/')
def index():
    return 'Welcome to Book Store Api'
if __name__ == '__main__':
     app.run()

Мои python команды для создания базы данных:

 >>> from app import db, User, Book

 >>> postgres = User(username='postgresuser', email='shruti1.malik.ramaswamy@gmail.com')

 >>> db.session.add(postgres)

 >>> db.session.commit()

 >>> flaskbook = Book()

 >>> flaskbook.title = "Building with Flask"
 >>> flaskbook.description = "The best Flask Python book on the web"

 >>> flaskbook.year = 2020

 >>> flaskbook.author_id = postgresisscary.id

 >>> db.session.add(flaskbook)

 >>> db.session.commit()

 if error: >>> db.session.rollback()

1 Ответ

0 голосов
/ 10 июля 2020

Похоже, вы попеременно используете автора / пользователя. Например, ниже

books = db.relationship('Book', backref='author')

Также Class Book не имеет атрибута 'author' в вашей модели. Вам необходимо добавить отношения к пользователю / автору.

Документация SQL Alchemy по отношениям, надеюсь, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...