第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。python
第 0003 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。mysql
在 coding 的过程当中,常常须要复用以前的代码,经过继承类的方法当然是好的,可是 OO 思想不是很强力,就须要调用以前的函数了;git
解释了这么多,仍是功力尚浅、、、那么怎么调用以前编写过的函数呢?github
假设须要在 A.py 中调用 B.py 文件内的 C(x, y) 函数:redis
# -*- coding: utf-8 -*- import B B.C(x, y) # 2 way from B import C C(x, y)
# -*- coding: utf-8 -*- import sys # 假设 B.py 在 /home/python 下 sys.path.append('/home/python') import B B.C(x, y) # 2 way import imp B = imp.load_source('B', '/home/python/B.py') improt B B.C(x, y)
This is a fork of MySQLdb1sql
This project adds Python 3 support and bug fixes. I hope this fork is merged back to MySQLdb1 like distribute was merged back to setuptools.数据库
官方的一段解释已经说的很清楚了,因为 MySQLdb 未能彻底支持 Python 3(python 2.7~3.3),因此有识之士就从其中 fork 出来一个版本,针对 Python3 进行了支持,就是 mysqlclient:安全
# Prerequisites # You may need to install the Python and MySQL development headers and libraries like so: sudo apt-get install python-dev libmysqlclient-dev # Debian / Ubuntu sudo yum install python-devel mysql-devel # Red Hat / CentOS # On Windows, there are binary wheel you can install without MySQLConnector/C or MSVC. # Note on Python 3 : if you are using python3 then you need to install python3-dev using the following command : sudo apt-get install python3-dev # debian / Ubuntu sudo yum install python3-devel # Red Hat / CentOS brew install mysql-connector-c # macOS (Homebrew) # Install from PyPI pip install mysqlclient # NOTE: Wheels for Windows may be not released with source package. You should pin version in your requirements.txt to avoid trying to install newest source package.
一开始使用 pip3 安装 mysqlclient 时,因为系统没有安装 python3-dev,致使在安装时报错,官方对其进行了说明:bash
Note on Python 3 : if you are using python3 then you need to install python3-dev using the following command : 见上app
# -*- coding: utf-8 -*- # 因为是 fork 的 MySQLdb,因此仍是 import MySQLdb improt MySQLdb # 建立一个 Mysql 链接对象 db = MySQLdb.connect(passwd="moonpie", db="thangs") # 执行一个查询,首先须要一个游标,而后你能够执行查询 c = db.cursor() max_pirce = 5 c.execute(""" SELECT spam, eggs, sausage FROM breakfast WHERE price < %s """, (max_price, )) # 或者能够执行一个 INSERT 语句 c.execute(""" INSERT INTO fast VALUES (%s) """, (max_price, )) # 获取结果 print(c.fetchone()) # commit SQL 语句 db.commit() # 关闭游标,断开链接 c.close() db.close()
在使用过程当中,因为清理了一些垃圾数据,致使了自增主键不连续,须要使主键归零有两种方法:
dbcc checkident(table_name, reseed, new_reseed_value) 当前值设置为 new_reseed_value,若是自建立表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入第一行将使用 new_reseed_value 的值小于标识列中的最大值,之后引用该表时将产生 2627 号错误信息,这个方法不会清空已有数据,操做比较灵活,不只能够将自增值归零,也适用于删除大量连续行后,从新设置自增值并插入新的数据;或重新的值开始,固然不能和已有的冲突。
数据库链接池:
数据库链接池(Connection pooling)是程序启动时创建足够的数据库链接,并将这些链接组成一个链接池,由程序动态地对池中的链接进行申请,使用,释放。
我的理解:建立数据库链接是一个很耗时的操做,也容易对数据库形成安全隐患。因此,在程序初始化的时候,集中建立多个数据库链接,并把他们集中管理,供程序使用,能够保证较快的数据库读写速度,还更加安全可靠。
看起来是很酷的一个方案,可是引用 Stack Overflow 上的一句话(谷歌翻译 0-0)
I'd say don't bother with the connection pooling. They're often a source of trouble and with MySQL they're not going to bring you the performance advantage you're hoping for. This road may be a lot of effort to follow--politically--because there's so much best practices hand waving and textbook verbiage in this space about the advantages of connection pooling.
我会说不要打扰链接池。 他们每每是一个麻烦的来源,并且MySQL也不会为您带来但愿的性能优点。 这条道路在政治上可能要付出很大的努力 - 由于在这个空间里有不少最好的作法,在这个空间里挥手和教科书,就是链接池的优势。
$ pip3 install redis
# -*- coding: utf-8 -*- import redis # 链接 redis 获得一个 redis 链接对象 r = redis.StrictRedis(host='localhost', port=6379, password='mypasswd', db=0) # 插入一条记录 r.set('foo', 'bar') # 插入一条列表记录 r.lpush('code': list) # 指定 key 获取 value print(r.get('foo')
相对而言,redis 用到的仍是简单一些,有待补充。
习题代码上传至 github