3

入力を要求するスクリプトがあり、その入力がテーブルに挿入されます。次回スクリプトを実行するときに、最後の入力のIDをユーザーに通知したいと思います。

テーブルは次のようになります。idINTEGERPRIMARYKEY AUTOINCREMENT、userid TEXT、domain TEXT、password TEXT、webserver TEXT、sqlserver TEXT

SQLITE_SEQUENCE WHERE name ='table_name'からSELECTseqを使用できると言われましたが、最後の行のidの代わりに次のテキストが生成されます。

私は非常に新しいPython/SQLite3コーダーであることに注意してください!

参考までに、コードソファは次のようになります。

#!/usr/bin/python
import os, sys, sqlite3
######## CHECK SYSTEM COMPATIBILITY ########
if os.name =='posix':
    os.system("clear")#CLEAR SCREEN#
    pass
else:
    sys.exit("Operating System is not supported")
######## END CHECK SYSTEM COMPATIBILITY ########
######## CHECK IF SCRIPT IS RUN AS ROOT ########
#if os.geteuid() != 0:
#       sys.exit("Script must be run as root")
#else:
#       pass
####### END CHECK IF SCRIPT IS RUN AS ROOT ########
####### CREATE DATABASE AND CHECK IF TABLE EXISTS ##########
conn = sqlite3.connect("dat.db")
c = conn.cursor()
c.execute ('''CREATE TABLE IF NOT EXISTS kunder
            (id INTEGER PRIMARY KEY AUTOINCREMENT, userid TEXT, domain TEXT, password      TEXT, webserver TEXT, sqlserver TEXT)''')
conn.commit()
print c.execute ("SELECT seq from SQLITE_SEQUENCE WHERE name='kunder'")
conn.close()
######## DONE CREATE DATABASE AND CHECK IF TABLE EXISTS #########
###### ASK FOR INPUT ##########
########### HERE NEEDS TO BE A CHECK TO DETERMINE THE LATEST USERID - ALSO NEEDS TO BE    FOR WEBSERVER AND PASSWORD #################
userid = raw_input("Enter userid: ")
########### HERE NEEDS TO BE A CHECK TO SEE IF USERID EXISTS!!!!!#####################
domain = raw_input("Enter domain: ")
password = raw_input("Enter password: ")
########### NEEDS TO BE A WAY TO AUTOGENERATE A PASSWORD!!! ####################
webserver = raw_input("Enter webserver: ")
sqlserver = raw_input("Enter sqlserver: ")
###### FINISHED ASK FOR INPUT #######
######## DATABASE ###########
conn = sqlite3.connect("dat.db")
c = conn.cursor()
c.execute ("INSERT INTO kunder (userid, domain, password, webserver, sqlserver) VALUES    (?,?,?,?,?)", (userid, domain, password, webserver, sqlserver))
conn.commit()
conn.close()
####### DONE WITH DATABASE ##########
4

3 に答える 3

5

SQLステートメントSELECT max(id) FROM table_nameは最大IDを提供する必要があります。自動インクリメントする場合、これは最後に挿入されたものと同じになります。

編集:Pythonで実際の値を取得するには、カーソルから値を読み取る必要があります。

cursor = sqlite3.execute('SELECT max(id) FROM table_name')
max_id = cursor.fetchone()[0]

fetchone()selectステートメントの最初の行をタプルとして返します(row_factoryが使用されている場合を除く)。したがってfetchone()[0]、この場合、最初の(そして唯一の)行の最初の(そして唯一の)列、つまりmax(id)を返します。

詳細については、 http://docs.python.org/2/library/sqlite3.htmlを参照してください。

于 2012-11-01T12:57:03.927 に答える
2

使ってみてくださいsqlite3_last_insert_rowid()

于 2012-11-01T12:54:18.660 に答える
0
import sqlite3

data_person_name = [('Michael', 'Fox'),
                    ('Adam', 'Miller'),
                    ('Andrew', 'Peck'),
                    ('James', 'Shroyer'),
                    ('Eric', 'Burger')]

con = sqlite3.connect(":memory:")
c = con.cursor()

c.execute('''CREATE TABLE q1_person_name
             (name_id INTEGER PRIMARY KEY,
              first_name varchar(20) NOT NULL,
              last_name varchar(20) NOT NULL)''')

for data_person in data_person_name:
    c.execute('INSERT INTO q1_person_name(first_name, last_name) VALUES (?,?)', data_person)
    # get the last rowid inserted
    last_name_id = c.lastrowid
    print(last_name_id)
于 2019-07-04T21:34:49.990 に答える