python连接数据库

2023-11-06

参考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()
复制代码
运行结果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python连接数据库 的相关文章

  • 在Python中使用字典作为switch语句[重复]

    这个问题在这里已经有答案了 我正在尝试使用字典用 Python 制作一个简单的计算器 这是我的代码 def default print Incorrect input def add a b print a b def sub a b pr
  • Django:将博客条目查看次数增加一。这有效率吗?

    我的索引视图中有以下代码 latest entry list Entry objects filter is published True order by date published 10 for entry in latest ent
  • 优化完美平方问题,类似于Python中的硬币找零

    我这里有一个硬币兑换的解决方案 python 中的 leetcode 硬币兑换 https stackoverflow com questions 69517078 coin change leetcode in python 因为完全平方
  • 如何将本机 popcount 与 numba 一起使用

    我正在使用 numba 0 57 1 我想在我的代码中利用本机 CPU popcount 我现有的代码太慢 因为我需要运行它数亿次 这是一个 MWE import numba as nb nb njit nb uint64 nb uint6
  • 如何测试使用 XCom 的 Apache Airflow 任务

    我正在尝试找出一种测试 DAG 的方法 其中有几个任务使用 XCom 进行通信 由于控制台命令只允许我从 DAG 运行任务 有没有一种方法可以测试通信而无需通过 UI 运行 DAG Thanks 这是一种对我有用的方法 尽管 Airflow
  • 在 Python 中绘制分类数据的三个维度

    我的数据包含三个我试图可视化的分类变量 城市 五个之一 职业 四种之一 血型 四种之一 到目前为止 我已经成功地以一种我认为易于使用的方式对数据进行了分组 import numpy as np pandas as pd Make data
  • Spyder 导入模块出错

    我正在尝试在 Spyder 中使用 sklearn 一开始 当我尝试导入它时 我收到 ImportError No module named sklearn 然后我用 PYTHONPATH 管理器设置 PATH 然后使用工具菜单中的 更新模
  • 使用 Pymongo 从 Windows 连接到 AWS 实例上的 MongoDB

    此行反复抛出错误 client MongoClient ec2 12 345 67 89 us east 2 compute amazonaws com 27017 ssl True ssl keyfile C mongo pem 由于显而
  • 小数缓存是Python规范中定义的还是一个实现细节?

    Python 似乎有一个所谓的 小数字缓存 用于存储 5 到 256 范围内的数字 我们可以使用以下程序来演示这一点 for i in range 7 258 if id i id i 0 print i is cached else pr
  • 在 vim 折叠线中语法高亮 Python

    我发现代码折叠 http en wikipedia org wiki Code folding帮助我更好地组织我的文件 因此 在我的底部 vimrc 我启用vim代码折叠 http vimdoc sourceforge net htmldo
  • 从主机名中提取域名

    是否有一种编程方式可以从给定的主机名查找域名 给出 gt www yahoo co jp 返回 gt yahoo co jp 有效但非常慢的方法是 拆分为 并从左侧删除 1 个组 使用 dnspython 加入并查询 SOA 记录 当返回有
  • 根据给定列表中的值替换列中的值[重复]

    这个问题在这里已经有答案了 我在数据框中有一列 仅允许定义列表中存在的值 例如 给定列表 l1 1 2 5 6 如果列表中不存在列中的值 我需要将每个值替换为 0 column Expected column 1 1 5 5 2 2 3 0
  • 使 np.loadtxt 使用多个可能的分隔符

    我有一个程序可以读取数据文件 用户可以选择他们想要使用的列 我希望它对于输入文件更加通用 有时 列可能如下所示 10 34 24 58 8 284 6 121 有时它们可 能看起来像这样 10 34 24 58 8 284 6 121 我希
  • 在python中安装scipy模块时出错

    我正在尝试使用 pip 在 python 中安装 scipy 模块 它显示以下错误 Command c users sony appdata local programs python python35 32 python exe u c
  • 如何修改 contenteditable 元素的innerHTML

    我使用 Selenium 与 Chrome driver 和 python3 6 来测试网站 我在网页中有代码片段如下 div class 3F6QL 2WovP div class 39LWd Type a message div div
  • Scrapy的redirect_urls异常.KeyError

    我是 Scrapy 和 Python 的新手 最近推出了我的第一个蜘蛛 有一个功能似乎以前有效 但现在它只适用于我试图废弃的一些网站 代码行是 item url direct response request meta redirect u
  • 使用 statsmodels.formula.api 中的 ols - 如何删除常数项?

    我正在遵循第一个例子statsmodels教程 http statsmodels sourceforge net devel http statsmodels sourceforge net devel 如何指定在 ols 中不使用常数项进
  • 如何限制scrapy请求对象?

    所以我有一个蜘蛛 我认为它正在泄漏内存 结果当我检查 telnet 控制台 gt gt gt prefs 时 它只是从链接丰富的页面中抓取了太多链接 有时它会超过 100 000 个 现在我已经一遍又一遍地浏览文档和谷歌 但我找不到一种方法
  • Pip 突然使用了错误版本的 Python

    在 os x 上使用 pip 时遇到一个奇怪的问题 据我所知 快速查看我的 bash history 似乎可以确认 我最近没有对我的配置进行任何更改 唉 pip 命令似乎突然使用了与以前不同的 python 版本 到目前为止 我使用命令 p
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更

随机推荐

  • 利用Python实现推荐系统&架构

    作者 禅与计算机程序设计艺术 1 简介 什么是推荐系统 作为互联网产品的基础设施 推荐系统通过分析用户行为 偏好 兴趣 为用户提供个性化的推荐 是非常重要的增值服务之一 根据维基百科定义 推荐系统是一个建立在用户行为数据上的信息过滤系统 它
  • 4*4(齐次)矩阵

    4 4矩阵一般也叫齐次矩阵 主要有两个作用 描述平移变换 描述透视投影变换 4 4平移矩阵 3 3矩阵可以用来旋转 缩放坐标系 但不能移动坐标系 需要在4维空间切变实现3维平移 比较容易理解的是在3维空间实现2维平移 而4 4平移矩阵不会影
  • 微信公众号开发笔记9(微信小程序、公众号网页实现上拉加载下拉刷新)

    目录 微信公众号网页WEUI mescroll js实现上拉加载下拉刷新 最终效果图 HTML页面代码 js部分 CSS样式 需要引用的前端资源 有其他问题请联系我 微信公众号网页WEUI mescroll js实现上拉加载下拉刷新 使用m
  • 苹果Mac OS X 10.6 Snow Leopard雪豹操作系统BT种子(.torrent)下载,6.13G个人版和Sever服务器版

    之前说过 苹果Mac OS X 10 6 Snow Leopard雪豹操作系统8月28日上市 今天从网上找到了苹果电脑Mac OS X 10 6 Snow Leopard雪豹操作系统BT种子 torrent文件 没装BT下载软件的苹果用户请
  • 三大涉黄APP被端!7000名女主播直播果聊内幕曝光

    关注后回复 进群 拉你进程序员交流群 作者丨Seven 7 来源丨扩展迷EXTFANS 随着网络的不断发展 直播也越来越受到大众的欢迎 自然而然 一些不法分子也从中嗅到商机 小哥哥 你想看什么 给我点赞 给我打赏 你想看啥都可以 果聊直播
  • js打砖块

    需求分析 1 小球在触碰到大盒子上 左 右边框 以及滑块后沿另一方向反弹 在碰到底边框后游戏结束 2 小球在触碰到方块之后 方块消失 3 消除所有方块获得游戏胜利 4 可通过鼠标与键盘两种方式移动滑块 代码分析 HTML代码 左边提示框盒子
  • 2023电工杯数学建模B题分析

    本次电工杯的A专业性较强 建议入门从B开始 本题目看上去一眼非常简单 实则考验数据的处理能力 分析能力以及如何在简单题目下能做得更加出众 讲论文写好抓住评委眼球 如果您阅读过往年国赛题目 您可以发现2021 BC 和2022C基本都是一眼就
  • GPIO操作0基础

    1 1GPIO结构 1 2固件库组织代码步骤 1 3IO口操作步骤 常用技巧总结 1 4IO口位操作 1 1 GPIO结构 1 基本结构 2 工作模式 3 寄存器地址 typedef struct stm32f10x h 定位到 GPIO
  • 【C语言】【猜数字】【极简】

    include
  • 登录注册,文件增删查改实现

    登录注册文件增删查改实现 需求 实现登录功能 注册功能 登录后文件可以进行增加删除修改查看等基本功能的操作 知识点 mybatis Tomcat servlet asion json req resp session 前提准备 pom xm
  • 对话量子链创始人帅初:区块链发展目标是构建协同进化的生命体

    有人说 区块链没有春节 只有春天 2月17日 大年初二 Qtum量子链创始人帅初在社区分享了自己关于区块链的25个看法 涵盖了公有链技术演进 区块链项目估值模型 区块链领域投资机会 区块链技术未来畅想等方方面面 引发了热议 ETH最大的风险
  • cocos 2.4.10升级到3.7

    Cocos Creator 3D v1 2 0 新版本中的cc找不到的解决办法 NZD Target的博客 CSDN博客 https www cnblogs com creator star p 17041314 html
  • 农夫和奶牛-二分(未完成没搞懂题目)

    农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000 000 但是 John的C 2 lt C lt N 头牛们并不喜欢这种布局
  • c++11 std::enable_if在模板偏特化的妙用

    1 模板自动推导功能 先看个例子 在调用TestTemplate函数时 我们可以在函数后面加上 lt 类型 gt 无歧义地指定调用的版本 结果如下 由于模板参数在函数参数中的位置是固定的 编译器其实可以推导出参数的类型 这样程序员们就可以不
  • 无线网络几种攻击方式

    Evil Twin Attack 双面恶魔攻击 攻击者使用相同的SSID创建一个欺诈性接入点 因为与受害者常用SSID名称一样 并且具有更强的型号 因此可以轻易欺骗受害者与之连接 建立连接后 攻击者可以替换网页 比如亚马逊付费界面替换成攻击
  • 字符串转换成数字的方法【C#】

    在C 中 经常需要将字符串转换成数字 简单总结三种方法 一 Convert 将一个基本数据类型转换成另一个基本数据类型 比如 将用户输入的数学成绩进行转换 int math Convert ToInt32 Console ReadLine
  • Nginx+Tomcat负载均衡、动静分离

    一 Tomcat多实例部署 Tomcat的多实例部署简单的讲就是基于端口的虚拟主机设置 1 1 安装jdk 1 安装jdk 某rpm包尚未安装 我们可以通过该命令查询其说明信息 安装以后会生成的文件 rpm qpl jdk 8u201 li
  • oracle查询某一个字段的数量总和

    select count from select count from 表名称 group by 多种数据量 表名 举个栗子 比如说我有一个数据类型的字段 里面有很多种的数据类型 而且每个数据类型都有近些年的数据 就是有很多重复的数据类型的
  • 【踩坑专栏】0%classes,0% lines covered

    这东西一般都是不小心点到debug按钮右边的coverage按钮出现的 解决办法 Ctrl Alt F6 取消勾选你的应用 点击最左侧的show detected 或直接点击下方中间的no coverage 参考文章 1 IDEA 项目结构
  • python连接数据库

    参考python核心编程 编写一个用户洗牌的脚本 根据用户输入 选择连接sqlserver或者MySQL 创建数据库 表 随机生成数据 并实现增删改查 其中 为了兼容python2和python3 统一了打印函数 录入函数 动态导包等 一些