0

私の SQLite データベースには、クライアントの連絡先の詳細のディレクトリである client_dir というテーブルがあります。さまざまな契約の詳細を含む、契約というテーブルもあります。コントラクト エントリを client_dir のクライアント エントリにバインドする外部キーを作成できる必要があります。

問題は、クライアント名を提供するだけで外部キーを生成できるようにしたいということです。フィールド エントリから行 ID を呼び出すにはどうすればよいですか?

私はそれがこのように見えるべきだと思う...

def new_contract():
    '''creates a new contract entry and links it to a client in the client_dir table'''
    client = input("Company name...")
    #int(row_id) = client
    contract = input("New contract...")
    self.cursor.execute("INSERT INTO contracts VALUES (?)",contract,#row_id)

アップデート

私のテーブルは次のようになります:

self.cursor.execute("""CREATE TABLE client_dir(cli_id INTEGER PRIMARY KEY AUTOINCREMENT, company TEXT, address TEXT, phone INTEGER, email TEXT)""")
self.cursor.execute("""CREATE TABLE contracts(con_id INTEGER PRIMARY KEY AUTOINCREMENT, contract TEXT, client_id INTEGER, FOREIGN KEY(client_id) REFERENCES client_dir(cli_id))""")

私の新しい _contract メソッドは次のようになります。

def new_contract(self):
    '''creates a new contract entry and links it to a client in the client_dir table'''
    client = input("Company name...")

    for f_list in self.cursor.execute("SELECT cli_id FROM client_dir WHERE company = (?)",[client]):
        f_key = f_list[0]

        print(f_key) # For debugging 

        contract = input("New contract...")
        self.cursor.execute("INSERT INTO contracts VALUES (NULL,?,?)",([contract],[f_key]))

print(f_key) は、int であると推測している画面にきちんとした 1 を出力しています。しかし、私はこのエラーが発生しています:

Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
c.new_contract()
File "C:\Python33\smalltime\Client.py", line 63, in new_contract
self.cursor.execute("INSERT INTO contracts VALUES (NULL,?,?)",([contract],[f_key]))
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
4

1 に答える 1

0

私は今これを修正しました。エラーは、INSERT に間違った構文を渡していたことが原因でした。

new_contract メソッドの正しい最後の行は次のようになります。

self.cursor.execute("INSERT INTO contracts VALUES (NULL,?,?)",**([contract,f_key]))**

(以前は 2 つの余分なブレースがありました: ([contract],[f_key]) で、それが破棄されていました)

あとは、print ステートメントを削除して追加するだけです

self.conn.commit()

最後まで。

于 2013-06-04T15:29:34.773 に答える