объект запроса sqlalchemy поверх sqlite3, возвращающий Nones - PullRequest
0 голосов
/ 19 ноября 2011

Я использую sqlalchemy 0.6.6 и sqlite 3.6.22 на Python 2.6. Когда я делаю:

In [1]: for i in ses.query(UserSnapshot):
   ...:     print i
   ...:     if i is None: break
   ...:     

Я вижу:

...
<twopt.UserSnapshot object at 0x86a52f50>
<twopt.UserSnapshot object at 0x86a55050>
<twopt.UserSnapshot object at 0x86a55110>
<twopt.UserSnapshot object at 0x86a551d0>
<twopt.UserSnapshot object at 0x86a55290>
<twopt.UserSnapshot object at 0x86a55350>
None

Моя схема:

class User(Base):
  __tablename__ = 'user' 
  id = Column(Integer, primary_key=True)
  blob = Column(LargeBinary, nullable=False)
  since = Column(DateTime, nullable=False)

class UserSnapshot(Base):
  __tablename__ = 'user_snapshot'
  id = Column(Integer, primary_key=True)
  uid = Column(Integer, ForeignKey(User.id), nullable=False)
  blob = Column(LargeBinary, nullable=False)
  time = Column(DateTime, nullable=False)

Если не считать выгрузки всей моей БД, есть какие-нибудь подсказки относительно того, что может привести к возвращению None? Я искал документацию, но не мог найти потенциальных клиентов. Спасибо.

1 Ответ

1 голос
/ 19 ноября 2011

Оу ... это произошло из-за того, что я возился с БД вне sqlalchemy, где я поменял таблицу user_snapshot копией, в которой вместо

было
id int primary key

id integer primary key

Очевидно, что sqlite обрабатывает их по-разному:

sqlite> create table a (a integer primary key, b integer);
sqlite> insert into a (b) values (0);
sqlite> select * from a;
1|0
sqlite> create table b (a int primary key, b integer);
sqlite> insert into b (b) values (0);
sqlite> select * from b;
|0

В результате многие из моих строк имели идентификаторы NULL.

Я не смог найти в http://www.sqlite.org/autoinc.html или http://www.sqlite.org/datatype3.html любое упоминание об этом своеобразном отличительном поведении.Во всяком случае, это так.

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