2017-12-13 6 views
1

私はプライマリキーが挿入されたレコードごとにプライマリキーを自動インクリメントすることを理解していますが、オプション1を使用してデータを挿入すると、オプション2を使用してデータを表示し、PKを1,2,3 ...私はPKを4桁の数字で保存したいと思います。 1、2、3ではなく0001,0002,0003。これを行う方法はありますか? ご注意:これは簡略化されたコードの例です。また 1、2、3ではなく、0001、0002、0003のようなプライマリキーの自動インクリメントを作成するにはどうすればよいですか?

import sqlite3 

connection = sqlite3.connect('database.db') 
cursor = connection.cursor() 
create_table = ''' 
CREATE TABLE IF NOT EXISTS employee (
staff_ID INTEGER PRIMARY KEY NOT NULL, 
fname VARCHAR(20) NOT NULL, 
lname VARCHAR(30) NOT NULL, 
gender VARCHAR(20) NOT NULL);''' 
cursor.execute(create_table) 

print('press 1 to add new user') 
print('press 2 to show all users') 
option = input('1 or 2: ') 

if option == '1': 
    #userid = input('User ID: ') 
    first_name = input('First name : ') 
    surname = input('Surname: ') 
    gender = input('Gender: ') 

    add_staff = '''INSERT INTO employee (fname, lname, gender) 
     VALUES (?, ?, ?, ?);''' 
    cursor.execute(add_staff, (first_name, surname, gender)) 

elif option == '2': 
    cursor.execute('SELECT * FROM employee') 
    print('fetchall:') 
    result = cursor.fetchall() 
    for r in result: 
    print(r) 
    cursor.execute('SELECT * FROM employee')  

connection.commit() 

connection.close() 

は、どのように私は、最初の名前と姓が入力されたとき、彼らはテキストのみの値であることを確認していますか? CREATEセクションで 'text'を使用しようとしました... any ide

答えて

1

zfillメソッドを使用できます。

key=1 
str(key).zfill(4) 
out[1]: '0001' 

key=10 
str(key).zfill(4) 
out[1]: '0010' 
+0

ありがとうございます!それはうまくいきます:D逆を行う方法はありますか?例えば0002から2に行くのですか? – JDomleo

+0

はい。ちょうど 'int( '0002')' –

0

integersは単なる数字です。保存方法を制御することはできません。ただし、ゼロでパッドにそれらを使用すると、テーブルを照会できます。

SELECT TO_CHAR(staff_id, 'fm0000'), fname, lname, gender 
FROM employee 
0

はまた、どのように私は、彼らが唯一のテキスト値であり、最初の名前と姓が 入力されたときにことを確認していますか?

    - :私は セクションを作成の「テキスト」を使用してみました... ROWIDの例外を除いて任意のIDE

は、任意の列には、次のストレージクラスの一つとして、任意の型の値を含めることができます8バイトのIEEE浮動小数点数として実

  • テキストデータベースエンコーディングに従って
  • ヌル
  • 整数(最大8バイトが、最小必須)
  • BLOBストレージ・クラスが決定される方法(バイト配列)しかしながら
  • は、値そのものと列の宣言された型/ affiniftyに従います。

    VARCHAR(SOMESTUPIDAMOUNT)とCHARISMAとの違いはありません。CHARが発生したため(INTの出現がないため)、列親和性の第2ルールが適用され、列の親和性はテキスト。

    • ルール2は、カラムの宣言された型は、 "CLOB"、または "TEXT" の "CHAR" のいずれかの文字列が含まれている場合

    • でその列は、TEXT親和性を持っています。 VARCHAR型に文字列 "CHAR"が含まれているため、TEXT アフィニティが割り当てられていることに注意してください。

    More here about SQLite 3 Datatypes - See 3.1 Determination of Column Affinity for the rules

    だから、VARCHARの列の列の親和性がTEXTであるので、それは価値と、列の(3であるTEXT親和性を有するためのルールに依存します。型の類似性): - TEXT親和店と

    列ストレージクラス NULL、TEXTまたはBLOBを使用して、すべてのデータ。数値データが TEXTアフィニティで列に挿入されると、保存前にテキスト形式に変換されます。

    本当にあなたは何もする必要はありません。

    しかし、重要なようは、あなたがget????の方法のいずれかを経由してだろうデータを取得する方法です。つまり、1を保存してgetIntメソッドを使用すると、1の整数が得られます。 somethingを保存し、getIntメソッドを使用すると、0が得られます。 getStringを使用すると、1somethingが得られます。

    There's a little more along with examples here

    関連する問題