首页 > 代码库 > Python常用库

Python常用库

Sqlite3

  • 创建一个Connection对象用于表示一个db,代码如下:

import sqlite3

conn = sqlite3.connect(‘example.db‘)#如果要在RAM中创建一个db,db名使用:memory:


当有多个connection同时访问db并且有一个进程在修改db时,db一直是被lock的,直到transaction被提交,connect()的常用参数:

  • timeout参数指定连接等待多久然后抛出异常,默认是5秒.
  • isolation_level:设置如何开启tranction,默认遇到DML语句时打开transaction,遇到non-DML语句时提交transaction
  • cached_statements:本次connection可以在缓存中存放的语句数,默认为100
  • uri:boolean型,使用uri指定db,可以指定连接的option,如以只读方式打开db
    db = sqlite3.connect(‘file:path/to/database?mode=ro‘, uri=True)
  • 然后创建一个Cursor对象用于执行sql命令执行查询时,要注意sql语句的安全,

    c=conn.cursor()
    # Never do this -- insecure!

    symbol = ‘RHAT‘

    c.execute("SELECT * FROM stocks WHERE symbol = ‘%s‘" % symbol)

    ?

    # Do this instead,注意元组中只有一个元素时后面要有逗号
    #sql语句中的替换符为?

    t = (‘RHAT‘,)

    c.execute(‘SELECT * FROM stocks WHERE symbol=?‘, t)

    print(c.fetchone())

    ?

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

  • 如果使用execute执行完查询语句后,获取数据可以使用如下方法:
    • 将cursor当做一个iterator,使用for语句每次获取一行row数据
    • 使用fetchone(),每次获取一行row数据,最后返回None
    • 使用fetchall(),获取row的list,没有数据则返回None



Python常用库