SQLAlchemy является замысловатым? [закрытый]

Редактировать 1:

Вы также запрашиваете mongoose, что неверно, поскольку в качестве запроса он принимает первый аргумент:

app.post('/tweet',(req,res)=>{
    tweetData.find(queryObject || {}, (err,data)=>{
        if(err){
            return res.json({success: false, error: err});
        }
        return res.json({success: true, data:data});
    });
})

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

Вы можете передать обратный вызов на setState, чтобы он выполнял обратный вызов после завершения изменения состояния, что-то вроде этого:

this.setState({ data: result.data }, () => {
    console.log(this.state)
})
33
задан casperOne 29 April 2012 в 12:53
поделиться

5 ответов

Что ж, есть одна вещь, которую вам не хватает: упомянутый вами учебник не «строит» полный пример, разные фрагменты кода не предназначены для объединения в один исходный файл. Скорее, они описывают различные способы использования библиотеки. Не нужно пытаться делать одно и то же снова и снова самостоятельно.

Если не брать в расчет часть фактического использования ормы в вашем примере, код может выглядеть следующим образом:

from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session

engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base(bind=engine)
Session = scoped_session(sessionmaker(engine))

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

Base.metadata.create_all()

"Декларативное" расширение заботится о определения таблицы и сопоставления ее с вашим классом, поэтому вам не нужно самостоятельно объявлять users_table . Класс User также позволяет создавать экземпляры с ключевыми аргументами, такими как User (name = "foo") (но не позиционными аргументами). Я также добавил использование scoped_session, что означает, что вы можете напрямую использовать Session , фактически не создавая его (он создаст экземпляр нового сеанса, если он еще не присутствует в текущем потоке, или повторно использовать существующий в противном случае)

86
ответ дан 27 November 2019 в 17:36
поделиться

Что ж, SQLAlchemy разделена на разные части, основная часть ядра просто обрабатывает БД, преобразуя ваши запросы, построенные на Python, в соответствующий язык SQL для базовой БД. Кроме того, есть поддержка сеансов, орма и нового декларативного синтаксиса.

Похоже, SQLObject (я не могу точно сказать, не использовал его много лет, да и то только один раз) пропускает большую часть этого и сразу делает часть ORM. Это часто упрощает работу с простыми данными (что в большинстве случаев может сойти с рук), но SQLAlchemy позволяет создавать более сложные макеты базы данных и, если вам это действительно нужно, приступить к работе с базой данных.

1
ответ дан 27 November 2019 в 17:36
поделиться

вы говорите «запутанный» .... кто-то другой может сказать «гибкий». Иногда вам это нужно, иногда нет. Разве не здорово, что у тебя есть выбор?

0
ответ дан 27 November 2019 в 17:36
поделиться

Воспользовавшись SQLObject (и прочитав только о SQLAlchemy), я могу сказать, что одна из сильных сторон SQLObject - это легкость и простота, с которой вы можете выполнять работу. Кроме того, отличную поддержку оказывает группа электронной почты ( https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss ), которая довольно быстро возвращает вам ответы.

1
ответ дан 27 November 2019 в 17:36
поделиться

Приведенные вами примеры кода не являются точными. Версия SQLAlchemy может быть немного урезана:

from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column('id', Integer, primary_key=True)
    name = Column('name', String)
    fullname = Column('fullname', String)
    password = Column('password', String)

    def __repr__(self):
       return "" % (self.name, self.fullname, self.password)

Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

# actually using the ORM isn't too bad..
ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
session.add(ed_user)

our_user = session.query(User).filter_by(name='ed').first()

session.add_all([
    User(name='wendy', fullname='Wendy Williams', password='foobar'),
    User(name='mary', fullname='Mary Contrary', password='xxg527'),
    User(name='fred', fullname='Fred Flinstone', password='blah')])

ed_user.password = 'f8s7ccs'

session.flush()

for instance in session.query(User).order_by(User.id):
    print instance.name, instance.fullname

for name, fullname in session.query(User.name, User.fullname):
    print name, fullname

Вы также можете найти Elixir , больше похожий на SQLObject (но поскольку я не использовал ни того, ни другого, это всего лишь предположение).

SQLObject не использовался). вообще, я не могу комментировать, что именно SA делает лучше. Но у меня был большой опыт работы с SA, особенно когда я имел дело со сложными, реальными, устаревшими схемами. Он отлично справляется с созданием хороших SQL-запросов по умолчанию и имеет множество способов их настройки.

Я обнаружил, что авторский элеваторный шаг автора SQLAlchemy довольно хорошо работает на практике.

10
ответ дан 27 November 2019 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: