Sqlalchemy Sqlite Автоинкремент не ведет себя, как ожидалось - PullRequest
2 голосов
/ 22 февраля 2012

У меня возникли проблемы с корректным приращением моего скрипта моего PK.Следуя документации sqlalchemy, необходимо выполнить специальную настройку, чтобы он работал с sqlite.Вот мой сценарий:

def db_stuff():
    engine = create_engine('sqlite:///test.db', echo=True)
    metadata = MetaData()
    db = Table('users', metadata,
       Column('id', Integer, primary_key=True),
       Column('name', String),
       Column('fullname', String),
       Column('password', String),
       sqlite_autoincrement=True)
    metadata.create_all(engine) 
    return engine.connect(),db


def add_to_db():
    ret = db_stuff()
    conn = ret[0]
    db = ret[1]
    try:

        conn.execute("INSERT INTO users VALUES ('1','john','smith john','23')")
        result = conn.execute(db.select())
        for row in result:
            print row 
    finally:
        conn.close()

Было бы здорово, если бы вы могли помочь мне выяснить, чего мне здесь не хватает, я начинаю отчаяться ... Проблема в том, что "id" неувеличивается каждый раз, и я получаю сообщение об ошибке, которое должно быть уникальным, когда я запускаю скрипт дважды.

TIA

Ответы [ 2 ]

5 голосов
/ 22 февраля 2012

попробуй

conn.execute("INSERT INTO users(name, fullname, password) VALUES ('john','smith john','23')")

id - автоинкремент, поэтому мы не должны передавать его, однако нам нужно указать, какие другие параметры представляют в таблице, т. Е. Куда должны идти значения ('john', 'smith john', '23').

Это должно работать.

0 голосов
/ 22 февраля 2012

Сделайте это:

conn.execute("INSERT INTO users VALUES ('john','smith john','23')")

Вы устанавливаете идентификатор на 1 - всегда.Просто оставьте его, и он будет заполнен из-за автоинкремента.

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