0

エントリの追加メソッドを作成しようとしていますが、IDの増分を機能させることができました。削除を行うと、特定の行を削除するのではなく、すべてのエントリが削除されるため、他のメソッドに影響を与えています。助けてくれませんか。

def addEntry () :

    #define cursor
    c=db.cursor()

    #execute cursor
    id=c.execute("select max(id)+1 from phones")

    # digs deep to get next id
    id = c.fetchall()[0].values()[0]

    #dosql 
    dosql("insert into phones values (%d,'%s','%s')" % (id,nameVar.get(), phoneVar.get()))
4

1 に答える 1

0

正確な問題について詳しく知ることなく、投稿したコードだけを見ると、いくつかのことがわかります。

  1. 実装しようとしている機能である「id」に MySQL の auto_increment カラムを使用しないのはなぜですか?

  2. 行の取得中に次の構文を見たことはありません。

    id = c.fetchall()[0].values()[0]

c.fetchall()[0] は値メソッドを持たないタプルを返すため、その行は機能しません。クエリが 1 行しか返さないことがわかっているので、次のように簡単に実行できます。

id = c.fetchone()[0]

or

id, = c.fetchone()

3.テーブルをロックしていないため、そのコードを一度に複数回実行すると、探している結果が得られず、2 つの行で同じ ID になる可能性があります。

于 2012-09-18T20:14:18.910 に答える