Python应用编程需要用到的针对不同数据库引擎的数据库接口:http://wiki.python.org/moin/DatabaseInterfaces
Python标准的DB API 2.0见:http://www.python.org/dev/peps/pep-0249/
本文将以SQLite和PySqlite为例来学习Python DB API。
pysqlite是一个sqlite为python 提供的api接口,它让一切对于sqlit的操作都变得异常简单。
从Python2.5起,pysqlite作为Python的一个标准模块。在使用标准库时,它被简称为sqlite3模块。
sqlite3标准库,详见:http://docs.python.org/3.3/library/sqlite3.html
基本的学习内容如下:
1.创建一张表
# filename:create.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # 创建数据表的sql语句 createtb_sql = """create table test( id integer, name text, age integer);""" # 调用execute()执行create_sql语句 cur.execute(createtb_sql) # 关闭游标 cur.close() # 关闭连接 conn.close()
2.简单的插入数据
# filename:insert.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # 向数据表中插入数据的sql语句 ''' insert_sql = """ insert into test values(1, 'huhu', 20); insert into test values(2, 'hengheng', 18); insert into test values(3, 'huahua', 18); """ ''' insert_sql = """ insert into test values(1, 'huhu', 20); """ # 调用execute()执行insert sql语句 # execute一次只能执行一条语句 cur.execute(insert_sql) # 提交事务 conn.commit() # 关闭游标 cur.close() # 关闭连接 conn.close()
3.查询
# filename:select.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # 查询数据表的sql语句 select_sql = """ select * from test;""" # 调用execute()执行select sql语句 cur.execute(select_sql) ''' while True: # fetchone()把查询的结果集的下一行作为序列或者None row = cur.fetchone() if row == None: break print(row) ''' ''' # fetchall()把查询的结果集的所有行作为序列的序列 for row in cur.fetchall(): print(row) ''' # 迭代对象遍历 for row in cur: print(row) # 关闭游标 cur.close() # 关闭连接 conn.close()
4.删除数据
# filename:delete.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # delete语句 delete_sql = """delete from test""" # execute()执行sql语句 cur.execute(delete_sql) # commit()提交事务 conn.commit() # 关闭游标 cur.close() # 关闭连接 conn.close()
以上四步的运行结果:
5.一次插入多条数据
# filename:insertmany.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # 向数据表中插入数据的sql语句 insert_sql = """insert into test values(""" # 调用execute()执行insert sql语句 # execute一次只能执行一条语句 for line in open('E:/code/py/db/data.txt'): fields = line.split(',') vals = [f for f in fields] cur.execute(insert_sql,vals) # 提交事务 conn.commit() # 关闭游标 cur.close() # 关闭连接 conn.close()
data.txt:
1,huhu,18
2,hengheng,18
3,lq,20
运行结果:
6.插入数据的方法(参数绑定,executemany的使用):
# inserts.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # 向数据表中插入数据的sql语句 # 最简单的insert形式 insert_sql1 = """insert into test values(1, 'huhu', 20);""" # execute()一次只能执行一条语句 cur.execute(insert_sql1) # 参数绑定 # execute()第二个参数:位置参数或者字典类型参数 insert_sql2 = """insert into test values(""" cur.execute(insert_sql2, (2,'hengheng',18)) insert_sql3 = """insert into test values(:id, :name, :age)""" cur.execute(insert_sql3, {'id':3, 'name':'lq', 'age':18}) # executemany()第二个参数:列表类型参数,适用于迭代器和生成器 l = [(4, 'huhu', 18), (5, 'hh', 18), (6, 'lq', 18)] cur.executemany(insert_sql2, l) # 利用生成器实现 def l_generator(): l = [(7, 'huhu', 18), (8, 'hh', 18), (9, 'lq', 18)] for t in l: yield(t) cur.executemany(insert_sql2, l_generator()) # 提交事务 conn.commit() # 关闭游标 cur.close() # 关闭连接 conn.close()
运行结果:
7.带条件的的update、delelte和select语句
(1)update
# filename:update.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # update语句 update_sql = """update test set name = 'noname' where id = """ # execute()和executem()执行sql语句 x = (1, ) cur.execute(update_sql, x) y = (2, ) cur.execute(update_sql, y) l = [(3, ),(4, ),(5, )] cur.executemany(update_sql, l) # commit()提交事务 conn.commit() # 关闭游标 cur.close() # 关闭连接 conn.close()
运行结果:
(2)delete
# filename:delete1.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # delete语句 delete_sql = """delete from test where id = """ # execute()和executemany()执行sql语句 cur.execute(delete_sql, (1, )) cur.executemany(delete_sql, [(2, ), (3, )]) # commit()提交事务 conn.commit() # 关闭游标 cur.close() # 关闭连接 conn.close()
运行结果:
(3)select
# filename:select1.py import sqlite3 # 创建连接对象 conn = sqlite3.connect('E:/code/py/db/test.db') # 创建一个游标对象 cur = conn.cursor() # 查询数据表的sql语句 select_sql = """ select * from test where id = """ # 调用execute()执行select sql语句 x = (8, ) cur.execute(select_sql, x) ''' # 在executemany中,不能执行select语句 y = [(2, ), (3, )] cur.executemany(select_sql, y) ''' # 迭代对象遍历 for row in cur: print(row) # 关闭游标 cur.close() # 关闭连接 conn.close()
运行结果:
sqlite3标准库相比Python DB API 2.0,增加了一个较为方便的函数executescript函数(一次可以执行多条sql),介绍如下:
This is a nonstandard convenience method for executing multiple SQL statements at once. It issues a COMMIT statement first, then executes the SQL script it gets as a parameter.
sql_script can be an instance of str or bytes.
Example:
import sqlite3 con = sqlite3.connect(":memory:") cur = con.cursor() cur.executescript(""" create table person( firstname, lastname, age ); create table book( title, author, published ); insert into book(title, author, published) values ( 'Dirk Gently''s Holistic Detective Agency', 'Douglas Adams', ); """)
好了这篇文章就为大家介绍到这了,希望大家以后多多支持。
SQLite,PySqlite
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 明达年度发烧碟MasterSuperiorAudiophile2021[DSF]
- 英文DJ 《致命的温柔》24K德国HD金碟DTS 2CD[WAV+分轨][1.7G]
- 张学友1997《不老的传说》宝丽金首版 [WAV+CUE][971M]
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]