据我所知,主键自动增加插入的每个记录的主键,但是当我使用选项1插入数据时,然后使用选项2显示数据,它将PK显示为1,2,3 ...等。但是,我希望它将PK存储为4位数,EG 0001,0002,0003而不是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()
另外,如何确保输入名字和姓氏时,它们只是文本值?我尝试在CREATE部分使用'text'...任何ide
答案 0 :(得分:2)
您可以使用zfill方法。
key=1
str(key).zfill(4)
out[1]: '0001'
key=10
str(key).zfill(4)
out[1]: '0010'
答案 1 :(得分:0)
integers
只是数字。您无法控制它们的存储方式。但是,在查询表时,您可以用零填充它们:
SELECT TO_CHAR(staff_id, 'fm0000'), fname, lname, gender
FROM employee
答案 2 :(得分:0)
另外,如何确定名字和姓氏的名称 输入,它们只是文字值?我尝试在CREATE中使用'text' 部分...任何想法
除了rowid之外,任何列都可以包含任何类型的值作为以下存储类之一: -
但是,如何确定存储类是根据值本身和列的声明类型/ affinifty来确定的。
VARCHAR(30)与VARCHAR(SOMESTUPIDAMOUNT)和CHARISMA没有区别,因为发生了CHAR(并且没有出现INT),因此应用了列亲和性的第二个规则,因此列的亲和性为TEXT
规则2
如果声明的列类型包含任何字符串“CHAR”, “CLOB”或“TEXT”然后该列具有TEXT亲和力。请注意 type VARCHAR包含字符串“CHAR”,因此分配了TEXT 亲和力。
More here about SQLite 3 Datatypes - See 3.1 Determination of Column Affinity for the rules
因此对于VARCHAR列,列亲和性是TEXT,因此它取决于具有TEXT亲和力的列的值和规则(3.类型亲和力): -
具有TEXT亲缘关系的列使用存储类存储所有数据 NULL,TEXT或BLOB。如果将数值数据插入到列中 TEXT亲缘关系在存储之前将其转换为文本形式。
所以你真的不需要任何东西。
但是,同样重要的是,您将如何通过get????
方法之一检索数据。简而言之,如果您存储1
并使用getInt
方法,您将获得1
的整数。如果您存储 something
并使用getInt
方法,则会获得0
。使用getString
,您将获得1
和 something
。