博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【python小练】0002
阅读量:5164 次
发布时间:2019-06-13

本文共 2362 字,大约阅读时间需要 7 分钟。

第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。  

 。 。 。(一脸懵逼)

 

Python访问数据库:()

1. SQLite是一种轻量级的嵌入式数据库,其数据库就是一个文件。Python中内置SQLite3,无需另外安装。

要操作数据库,首先要连接到数据库,连接称作“Connection”。

连接数据库后,需要打开游标,称为“Cursor”,通过“Cursor”执行SQL语句,获得执行结果。

实践:

# 导入SQLite驱动:>>> import sqlite3# 连接到SQLite数据库# 数据库文件是test.db# 如果文件不存在,会自动在当前目录创建:>>> conn = sqlite3.connect('test.db')# 创建一个Cursor:>>> cursor = conn.cursor()# 执行一条SQL语句,创建user表:>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
# 继续执行一条SQL语句,插入一条记录:>>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')
# 通过rowcount获得插入的行数:>>> cursor.rowcount1# 关闭Cursor:>>> cursor.close()# 提交事务:>>> conn.commit()# 关闭Connection:>>> conn.close()#---------------#以下为查询记录操作>>> conn = sqlite3.connect('test.db')>>> cursor = conn.cursor()# 执行查询语句:>>> cursor.execute('select * from user where id=?', '1')
# 获得查询结果集:>>> values = cursor.fetchall()>>> values[('1', 'Michael')]>>> cursor.close()>>> conn.close()

注意,最后一定要记得关闭之前打开的connection和cursor,否则会造成数据泄露。

官方文档:

 

照葫芦画瓢做这题。

code:

# coding = utf-8__author__= 'liez'import randomimport sqlite3def make_number(num, length):    str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'    a = []    i = 0    while i < num:        numstr = ''        for j in range(length):            numstr += random.choice(str)        if numstr not in a: #如果没重复            a.append(numstr)            i += 1    print(a)    return adef save(a):    try:        connect = sqlite3.connect('codelist.db')    except:        print("failed")    cur = connect.cursor()    cur.execute('create table if not exists codes(code char(20) primary key)')    for item in a:        cur.execute('insert into codes values (?)', [item])    print("success")    connect.commit()    cur.close()    connect.close()save(make_number(20, 10))

 

make_number()函数和0001题里的一样,save()函数有个地方卡了好久。

之前一直有一条错误:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 10 supplied.

搞了半天发现是这里:

for item in a:        cur.execute('insert into codes values (?)', [item]) #开始漏了‘[]’

(自己抠了半天才想起上stackoverflow真是撒到家了 ̄へ ̄)

先前创建的table只能存放10个单个char的序列号,而序列号长度大于1就会出错。

加入生成长度为10的序列号,如果不加‘[]’,则每个序列号的10个char会被单独视作10个数据占十个格子(10 supplied)。

加上‘[]’表示这整个是一个元素。 

转载于:https://www.cnblogs.com/liez/p/5312279.html

你可能感兴趣的文章
今天第一次写博客
查看>>
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
IP V4 和 IP V6 初识
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
C语言基础小结(一)
查看>>
STL中的优先级队列priority_queue
查看>>
UE4 使用UGM制作血条
查看>>
浏览器对属性兼容性支持力度查询网址
查看>>
OO学习总结与体会
查看>>
虚拟机长时间不关造成的问题
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>