参考python核心编程

编写一个用户洗牌的脚本,根据用户输入,选择连接sqlserver或者MySQL,创建数据库、表,随机生成数据,并实现增删改查。

其中,为了兼容python2和python3,统一了打印函数、录入函数、动态导包等

一些字段声明为全局变量,这样我们在后续的学习中,可以引用这些变量和函数。

ushuffle.py:

#python 3.6
#统一输出函数,使用distutils.log.warn()函数代替版本2中的print语句和版本3中的print函数
from distutils.log import warn as printf
from random import randrange
#检测内置函数中是否包括raw_input(),如果存在说明版本是2(或者1),不存在说明是3。这样的话,无论是哪个版本,最终scanf函数表示了该功能
if isinstance(__builtins__,dict) and 'raw_input' in __builtins__:
scanf = raw_input
elif hasattr(__builtins__,'raw_input'):
scanf = raw_input
else:
scanf = input FIELDS = ('login','userid','projid')
COLSIZ = 10
RDBMSs = {'s':'sql server','m':'mysql'}
DBNAME = 'test'
DB_EXC = None
DBUSER = 'root'
DBSERVER = '127.0.0.1'
NAMELEN = 10 tformat = lambda s: str(s).title().ljust(COLSIZ)#str().title()将单词首字母大写;ljust()左对齐,并使用空格填充直至达到指定长度
cformat = lambda s: s.upper().ljust(COLSIZ) # def setup():
return RDBMSs[scanf('''
请选择数据库类型:
(Sql) Server
(M)ySQL 请键入:''').strip().lower()[0]] def connect(db,DBNAME):
global DB_EXC
dbDir = '%s_%s' % (db,DBNAME)
if db == 'mysql':
try:
#python3.0以前的版本
import MySQLdb
import _mysql_exceptions as DB_EXC
try:
cxn = MySQLdb.connect(user = DBUSER,password = 'Jwxjs123456',db=DBNAME)
except DB_EXC.OperationalError:
try:
cxn = MySQLdb.connect(user = DBUSER,password = 'Jwxjs123456',db=DBNAME)
cxn.query('create database %s' % DBNAME)
cxn.commit()
cxn.close()
cxn = MySQLdb.connect(db=DBNAME)
except DB_EXC.OperationalError:
return None
except ModuleNotFoundError: #ImportError
try:
#python3.0以上的版本
import pymysql
import pymysql.err as DB_EXC
try:
cxn = pymysql.connect(**{'host':DBSERVER,'database':DBNAME,'user':DBUSER,'password':'Jwxjs123456'})
except DB_EXC.InternalError:
#连接成功但是没有指定的数据库
cxn = pymysql.connect(**{'host':DBSERVER,'user':DBUSER,'password':'Jwxjs123456'})
cur = cxn.cursor()
cur.execute('create database %s;' % DBNAME)
cxn.commit()
cxn = pymysql.connect(**{'host':DBSERVER,'database':DBNAME,'user':DBUSER,'password':'Jwxjs123456'})
except ImportError:
return None
elif db == 'sql server':
import pymssql
import _mssql
#import pymssql.StandardError as DB_EXC
try:
cxn = pymssql.connect(**{'server':DBSERVER,'database':DBNAME,'password':'Jwxjs123456','user':'sa'})
printf(' 成功链接数据库%s' % DBNAME)
except BaseException:
#这里一定要设置为自动提交模式,否则创建数据库会失败
cxn = pymssql.connect(**{'server':DBSERVER,'password':'Jwxjs123456','user':'sa','autocommit':True}) cursor = cxn.cursor()
cxn.commit()
cursor.execute('create database %s;' % DBNAME)
#cxn.close()
cxn = pymssql.connect(**{'server':DBSERVER,'database':DBNAME,'password':'Jwxjs123456','user':'sa','autocommit':True})
printf('数据库%s 不存在,新建该数据库' % DBNAME)
return cxn def create(cur):
try:
cur.execute('''
create table users(login varchar(%s),
userid int,
projid int
)
''' % NAMELEN)
printf('……………新建users表成功')
except BaseException:
drop(cur)
create(cur)
printf(' 已存在表users,删除后并新建此表……………………') drop = lambda cur:cur.execute('drop table users') NAMES =(
('arron',8312),('angle',7603),('dane',7306),
('jess',7912),('jim',7512),('larry',7311),
) def randName():
pick = set(NAMES)#内置函数set()创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等
while pick:
yield pick.pop() def insert(cur,db):
cur.executemany('insert into users values(%s,%s,%s)',[(who,uid,randrange(1,5)) for who,uid in randName()]) #返回最后一次操作影响的行数,这里考虑右边对象是不是支持该属性,不支持的话则返回-1
getRC = lambda cur:cur.rowcount if hasattr(cur,'rowcount') else -1 def update(cur):
fr = randrange(1,5)
to = randrange(1,5)
cur.execute('update users set projid = %s where projid = %s' % (to,fr))
return fr,to,getRC(cur) def dbDump(cur):
cur.execute('select * from users')
printf('\n%s' % ''.join(map(cformat,FIELDS)))
for data in cur.fetchall():
printf(''.join(map(tformat,data)))#join()将序列中的元素以指定的字符连接生成一个新的字符串。 def delete(cur):
rm = randrange(1,5)
cur.execute('delete from users where projid = %s' % rm)
return rm,getRC(cur) drop = lambda cur:cur.execute('drop table users') def main():
#用户选择数据库类型
db = setup()
printf('\n****将要连接到 %s(%s) 数据库****' % (DBNAME,db))
#创建数据库连接
cxn = connect(db,DBNAME)
if not cxn:
printf('\n 连接数据库%s(%s) 失败,程序退出!!!' % (DBNAME,db))
return
else:
printf('\n 成功连接数据库%s(%s) ' % (DBNAME,db))
cur = cxn.cursor()
printf('\n 创建 users表……')
create(cur) printf('\n*****初始化users表******')
insert(cur,db)
dbDump(cur) printf('\n ***随机更改projid****')
fr,to,num = update(cur)
printf('\t(%s 个用户被更改了) from (%s) to(%s)' % (num,fr,to))
dbDump(cur) printf('\n***随机删除某一组数据***')
rm,num = delete(cur)
printf('\t(组%s中共%s个用户被删除了)' % (rm,num))
dbDump(cur) printf('\n*****删除users表*******')
drop(cur) if db == 'mysql':
cxn.commit() #sqlserver 的链接已经被设置为自动提交
printf('\n 关闭数据库连接 ')
cxn.close() if __name__ == '__main__':
main()

运行结果如下:

python连接sqlserver和MySQL实现增删改查的更多相关文章

  1. .net 连接SqlServer数据库及基本增删改查

    一.写在前面 因为这学期选修的 .net 课程就要上机考试了,所以总结下.net 操作 SqlServer 数据的方法.(因为本人方向是 Java,所以对.net 的了解不多,但以下所写代码均是经过测 ...

  2. python连接sql server数据库实现增删改查

    简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html).在官 ...

  3. python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...

  4. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  5. java连接mysql以及增删改查操作

    java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...

  6. 使用MySQL练习增删改查时因为版本问题出现连接错误

    使用MySQL练习增删改查时出现连接错误,错误提示如下: 2020-02-19 19:53:51.088 ERROR 16328 --- [reate-249798694] com.alibaba.d ...

  7. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  8. Asp.Net操作MySql数据库增删改查

    Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git  1.安装MySQL数据库 ...

  9. jsp+Servlet+JavaBean+JDBC+MySQL项目增删改查

    1简单的Mvc,分层建包. java resources src/mian/java (1)dao 包 JDBC连接类,连接数据库.增删改查方法,其他的方法. (2)model包 实体类,数据库字段, ...

随机推荐

  1. 2011-11-14:命令执行漏洞防御,PHP反序列化漏洞产生原因,笔记

    命令执行漏洞防御尽量不要使用系统执行命令在进入执行命令函数方法之前,变量一定要做好过滤,对敏感字符进行转义在使用动态函数之前,确保使用的函数是指定的函数之一对PHP语言来说,不能完全控制的危险函数最好 ...

  2. 新闻实时分析系统-Hadoop2.X HA架构与部署

    1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解 ...

  3. 【JavaEE】之SSM-Maven依赖积累

    本帖中收集JavaEE SSM框架使用的Maven版本库中的依赖.本帖持续更新...... 日志输出: <dependency> <groupId>commons-loggin ...

  4. 关于python语言优化的一些思考

    最近一直在做python工程化相关的工作,颇有心得,遂总结一下.一是为了整理思绪,二是为了解放自己健忘的大脑. python是一个C的语法糖盒子 原生的python通常都是由cpython实现,而cp ...

  5. Vue项目功能插件

    项目功能插件 vue-router { path: '/', name: 'home', // 路由的重定向 redirect: '/home' } { // 一级路由, 在根组件中被渲染, 替换根组 ...

  6. Linux基本架构

    Linux linux设计思想 1.程序应该小而专一,程序应该尽量的小,且只专注于一件事上,不要开发那些看起来有用但是90%的情况都用不到的特性: 2.程序不只要考虑性能, 程序的可移植性更重要,sh ...

  7. Spring Cloud Gateway - 路由法则

    1. After Route Predicate Factory 输入一个参数:时间,匹配该时间之后的请求,示例配置: spring: cloud: gateway: routes: - id: af ...

  8. TensorFlow2.0(11):tf.keras建模三部曲

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  9. 在Linux下生成crypt加密密码

    [摘要]当我们用红帽Kickstart脚本或useradd或其他方式写东西的时候,经常会需要用到crypt命令加密生成的密码格式.那么,有没有其他方式可以生成这种格式的密码?事实上,方法有很多 1.我 ...

  10. Python微信公众号教程基础篇——收发文本消息

    1. 概述: 在本篇教程中,你将学会使用华为云弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果 ...