SQLite Tutorial
*思考题*
- 如何和 SQLite 数据库建立连接?
- 如何在 SQLite 中建立游标对象?
- 如何借助游标执行 SQL 语句?
SQLite不需要单独的server进程;一些应用使用SQLite作为内部数据存储。
Python自带SQLite,不需要安装
import sqlite3
conn = sqlite3.connect('example.db') # 生成Connection object代表数据库
c = conn.cursor() # 指针,可用来执行语句
# Create table
c.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
# Insert a row
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")
# Save (commit) the changes
conn.commit()
# We can also close the connection if we are done with it.
# Just be sure any changes have been committed or they will be lost.
conn.close()
运行SQL语句需要Python中的变量。注意不要用字符串进行操作,这样非常不安全 funny example from xkcd
要使用DB-API参数替代。需要参数值的时候用?
作为占位符,在将tuple of value作为execute()
方法的第二个参数传入。
# NEVER DO THIS! -- INSECURE!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# DO THIS INSTEAD.
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
('2006-04-06', 'SELL', 'IBM', 500, 53.00),
]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
c.execute('UPDATE city_weather8 SET last_search=?, weather=?, temp=?, query=? WHERE city=?',
(record[1:], record[0]))
提取数据fetchone()
, fetchall()
基本概念
SQLite是一种嵌入式数据库,它的数据库就是一个文件。SQLite本身由C语言所写,体积很小,经常被集成到各种程序中,包括iOS或者Android的APP中。
一个数据库中有多个表,表是数据库中存放关系数据的集合,表和表之间通过外键关联。
- 操作数据之前,要连接到数据库 - connection.
- 连接到数据库后,要打开游标 - cursor,通过游标执行SQL语句,获得执行结果.
cursor.rowcount
values = cursor.fetchall()
注意打开的conn
和cursor
用后一定要关闭
出现的问题
- 查处行的时候用题大夫一直报错
syntax error near record
常识直接将值输入是可以的 ```python c.execute('''INSERT INTO city_weather4 VALUES (?,?,?,?,?),record''')`
c.execute('''INSERT INTO city_weather4 VALUES ( '北京','2017-02-17T00:05:00+08:00','晴','3',1)''')
> GEEZE~折腾了好久,发现是`record`不应包含在`‘’‘’里面....
```python
c.execute('INSERT INTO city_weather4 VALUES (?,?,?,?,?)',
record)`
- 创建表格只需要一次,之后使用不能够每次创建;如何判断一个表格是否存在在进行创建?
CREATE TABLE IF NOT EXISTS
Change Log
2017.02.20 Initial Draft