【问题标题】:Query returns different data when using MySQL versus SQLite使用 MySQL 和 SQLite 时查询返回不同的数据
【发布时间】:2015-06-01 03:45:39
【问题描述】:

当我使用 SQLAlchemy 查询以下模型时,我没有得到预期的结果。

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True)

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

我直接创建了MySQL表,然后commit了一些数据:

mysql> CREATE TABLE "users" (id INTEGER, username VARCHAR(64));

mysql> select * from users;  
+------+-------------+---------+  
| id   | username    | role_id |  
+------+-------------+---------+  
| NULL | yzxu        | NULL    |   
| NULL | after       | NULL    |  
+------+-------------+---------+  

使用 MySQL 时,SQLAlchemy 查询返回 None

>>> User.query.filter_by(username='after').all()
[None]

使用 SQLite 时,返回正确的用户名。

>>> db.create_all()
>>> db.session.add(User(username='after'))
>>> db.session.commit()
>>> User.query.filter_by(username='after').all()
[<User u'after'>]

【问题讨论】:

  • 不使用任何过滤器时是否有效?
  • No.当我使用 User.query.all() 时它也返回 [None]
  • 我没有完全理解这个问题的细节,但问题可能与您有两个单独的事务(比较 MySQL 和 SQLite 时具有不同的“隔离”级别)而他们没有彼此呢。尝试致电db.session.query(User).all() 而不是User.query.all() 来检查。

标签: python flask sqlalchemy


【解决方案1】:

MySQL 表是我手动创建的,没有使用 SQLAlchemy。它缺少在id 上设置的主键。

【讨论】:

  • 记住,[] 是一个空列表,[None] 是一个包含一个元素的列表(表示为值None)。
猜你喜欢
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2021-08-17
  • 2021-12-18
相关资源
最近更新 更多