2017-12-13 4 views
1

Ich verstehe, dass der Primärschlüssel automatisch den Primärschlüssel für jeden Eintrag einfügt, aber wenn ich Daten mit Option 1 einfügen, dann zeigen Sie die Daten mit Option 2, zeigt die PK als 1,2,3 ... usw. Allerdings Ich möchte, dass es den PK als 4 Ziffern speichert, EG 0001,0002,0003 statt 1,2,3. Gibt es eine Möglichkeit, dies zu tun? BITTE BEACHTEN SIE: Dies ist ein Beispiel für einen vereinfachten Code.Wie mache ich den Primärschlüssel Autoincrement wie 0001, 0002, 0003 statt 1, 2, 3?

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() 

Auch, wie kann ich sicherstellen, dass, wenn der Vorname und Nachname eingegeben werden, werden sie nur Textwerte sind? Ich habe versucht, 'Text' in der CREATE-Sektion ... any ide

Antwort

1

Sie können zfill Methode verwenden.

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

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

Vielen Dank! Es funktioniert: D Gibt es eine Möglichkeit, das Gegenteil zu tun? Zum Beispiel von 0002 zu 2? – JDomleo

+0

Ja. Mach einfach 'int ('0002')' –

0

integers sind nur Zahlen. Sie können nicht kontrollieren, wie sie gespeichert sind. Sie könnten jedoch Pad sie mit Nullen, wenn Sie Abfrage der Tabelle:

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

Auch, wie kann ich sicherstellen, dass, wenn der Vorname und Nachname sind eingegeben, sie nur Textwerte sind? Ich habe versucht, ‚Text‘ in dem CREATE Abschnitt mit ... jedem ide

Mit Ausnahme der Rowid jeder Spalte, jede Art von Wert als einer der folgenden Speicherklassen enthalten: -

  • Null
  • Integer (bis zu 8 Byte, aber das erforderliche Minimum)
  • Echt als 8-Byte IEEE Gleitkommazahl
  • Text entsprechend der Datenbankcodierung
  • BLOB (Bytedatenfeld)

jedoch, wie die Speicherklasse bestimmt wird, gemäß dem Wert selbst und die deklarierten Typ/affinifty Säule.

VARCHAR (30) unterscheidet sich weder von VARCHAR (SOMESTUPIDAMOUNT) noch von CHARISMA, da aufgrund des Auftretens von CHAR (und ohne das Auftreten von INT) die 2. Regel der Spaltenaffinität angewendet wird und somit die Affinität der Spalte ist TEXT.

  • Regel 2 ist

  • Wenn der deklarierte Typ der Spalte jede der Saiten "CHAR" enthält, "CLOB" oder "TEXT" dann dieser Spalt TEXT Affinität . Beachten Sie, dass der Typ VARCHAR die Zeichenfolge "CHAR" enthält und daher TEXT Affinität zugewiesen ist.

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

also die VARCHAR-Spalten ist die Spalte Affinität TEXT so dann mit TEXT-Affinität auf den Wert und die Regel für die Spalte ab, die (3.Typ Affinität): -

Eine Spalte mit TEXT-Affinität speichert alle Daten unter Verwendung der Speicherklassen NULL, TEXT oder BLOB. Wenn numerische Daten in eine Spalte mit der TEXT-Affinität eingefügt werden, werden sie vor dem Speichern in Textform umgewandelt.

Also wirklich brauchen Sie nichts.

JEDOCH so wichtig ist, wie Sie die Daten abrufen, die über eine der get???? Methoden wäre. Kurz gesagt, wenn Sie 1 speichern und die Methode getInt verwenden, erhalten Sie eine ganze Zahl von 1. Wenn Sie something speichern und die Methode getInt verwenden, erhalten Sie 0. Mit getString erhalten Sie 1 und something.

There's a little more along with examples here

Verwandte Themen