账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    flask 怎么在db.session.add后获取自增id
    52
    0
    @v1.route('/users/register', methods=('POST',))
    def users_register():
        form = RegisterForm()
    
        if not form.validate_on_submit():
            return formate_validate_error(form.errors)
    
        try:
            #
            user = User()
            user.name = form.name.data
            user.password = password_encode(form.password.data)
            user.email = form.email.data
            db.session.add(user)
    
            print(user.id) ## 获取到的是None 这个ID要在这个事物里使用的。
    
            #login_result = login_user(user)
    
            db.session.commit()
            # return return_success({
            #     'token': login_result['token']
            # })
            return 'e'
        except Exception as e:
            db.session.rollback()
            return return_err(str(e), status='exception')

    执行记录:

    [2018-07-24 10:32:39 +0800] [43241] [DEBUG] POST /v1/users/register
    2018-07-24 10:32:39,622 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
    2018-07-24 10:32:39,624 INFO sqlalchemy.engine.base.Engine SELECT count(*) AS count_1 
    FROM (SELECT users.id AS users_id, users.name AS users_name, users.email AS users_email, users.mobile AS users_mobile, users.password AS users_password, users._2fa AS users__2fa, users.created_at AS users_created_at 
    FROM users 
    WHERE lower(users.name) = lower(%(lower_1)s)) AS anon_1
    2018-07-24 10:32:39,624 INFO sqlalchemy.engine.base.Engine {'lower_1': 'test1'}
    2018-07-24 10:32:39,632 INFO sqlalchemy.engine.base.Engine SELECT count(*) AS count_1 
    FROM (SELECT users.id AS users_id, users.name AS users_name, users.email AS users_email, users.mobile AS users_mobile, users.password AS users_password, users._2fa AS users__2fa, users.created_at AS users_created_at 
    FROM users 
    WHERE lower(users.email) = lower(%(lower_1)s)) AS anon_1
    2018-07-24 10:32:39,633 INFO sqlalchemy.engine.base.Engine {'lower_1': 'ffff@asdf.com'}
    None
    2018-07-24 10:32:39,744 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, email, password, _2fa, created_at) VALUES (%(name)s, %(email)s, %(password)s, %(_2fa)s, %(created_at)s) RETURNING users.id
    2018-07-24 10:32:39,744 INFO sqlalchemy.engine.base.Engine {'name': 'test1', 'email': 'ffff@asdf.com', 'password': '$2b$10$SDhD7crcXoT6Gq/bA6WN2.6cvn3GUyPJxUWa1W37wpy99n1pgoiNW', '_2fa': None, 'created_at': '2018-07-24 02:32:39+00:00'}
    2018-07-24 10:32:39,745 INFO sqlalchemy.engine.base.Engine ROLLBACK

    获取到个异常:

    (psycopg2.IntegrityError) duplicate key value violates unique constraint \"idx_users_email\"\nDETAIL:  Key (lower('email'::text))=(email) already exists.\n [SQL: 'INSERT INTO users (name, email, password, _2fa, created_at) VALUES (%(name)s, %(email)s, %(password)s, %(_2fa)s, %(created_at)s) RETURNING users.id'] [parameters: {'name': 'test1', 'email': 'ffff@asdf.com', 'password': '$2b$10$SDhD7crcXoT6Gq/bA6WN2.6cvn3GUyPJxUWa1W37wpy99n1pgoiNW', '_2fa': None, 'created_at': '2018-07-24 02:32:39+00:00'}] (Background on this error at: http://sqlalche.me/e/gkpj)
    # models
    class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.BigInteger, primary_key=True)
        name = db.Column(db.VARCHAR(50), nullable=False)
        email = db.Column(db.VARCHAR(200), nullable=False)
        # 用户手机 默认为NULL
        mobile = db.Column(db.VARCHAR(20), server_default=text('NULL'))
    
        # 登录密码
        password = db.Column(db.VARCHAR, nullable=False)
    
        # 两步验证秘钥
        _2fa = db.Column(db.VARCHAR(32), nullable=True)
    
        # 注册时间
        created_at = db.Column(db.TIMESTAMP(False), nullable=False, server_default=text('now()'))
    
        __table_args__ = (
            Index('idx_users_name', func.lower('name'), unique=True),
            Index('idx_users_email', func.lower('email'), unique=True)
        )
    
        def __init__(self):
            if not self.created_at:
                self.created_at = now().format()
    
        def __repr__(self):
            return '<User %s>' % self.name

    但是数据库里确实没有name和email重复的

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 霸气无人能挡 普通会员 1楼

      在Flask中,你可以使用session对象的save()方法来保存数据,然后在之后的查询中使用session.query().你可以在session.query()中使用session.add()方法来添加数据。

      假设你有一个User模型,它有一个id字段,你可以这样添加数据:

      ```python from flask import session

      session.add(User(id=1, name='John Doe')) ```

      然后,你可以使用session.query()来查询数据:

      python users = session.query(User).all()

      在这个查询中,session.query()会返回所有的User对象,all()方法会返回所有的结果。然后,你可以使用users来获取所有用户的信息。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部