SQLite:自增主键设置及插入变量到数据库

想不去学习数据库支持,边试了Flask-SQLALchemy等工具,但发现那样根本不是解决办法,最后还是狠下心学数据库支持。我选择的是比较轻量级的数据库SQLite作为入门。

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。

按照w3cschool提供的教程研究了一番,基本顺利。但等研究python接口的时候出现了点问题。

自增主键

一般数据库都需要设置一个自增主键,作为唯一ID。而w3cschool提供例子却是使用的人工输入,实际使用中会变得很麻烦。试了很多方法才找到设置方法。一下是w3cschool提供的创建表命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')
print "Table created successfully";

conn.close()

其中ID为整数,主键且不为空,按照惯例,应该是主键。但实际使用过程中发现若要使ID为主键,必须按照以下的命令创建表

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute('''CREATE TABLE NEW
(ID INTEGER PRIMARY KEY,
NAME TEXT NOT NULL);''')
print "Table created successfully";

conn.close()

ID类型INT改成INTEGER并且去掉NOT NULL

给这个表插入值的时候操作为

1
2
conn.execute("INSERT INTO NEW2 (ID,NAME) \
VALUES (NULL, 'namehere')");

插入变量

教程翻了很多遍着实没找到如何传递一个变量的值到数据库,最后google出一个方案,循环插入变量代码如下。

1
2
3
4
5
6
7
8
9
10
import sqlite3

conn = sqlite3.connect('test.db')
for i in range(1,9):
t = 'list' + str(i)
conn.execute("INSERT INTO NEW2 (ID,NAME) \
VALUES (NULL, ?)",(t,))

conn.commit()
conn.close()

运行结果为数据库添加了一下数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ID =  1
NAME = list1
ID = 2
NAME = list2
ID = 3
NAME = list3
ID = 4
NAME = list4
ID = 5
NAME = list5
ID = 6
NAME = list6
ID = 7
NAME = list7
ID = 8
NAME = list8