【发布时间】: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