python中复制字符串的库函数是_048孤荷凌寒自学python通用同一数据库中复制数据表函数最终完成...

孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成

(完整学习过程屏幕记录视频地址在文末)

今天继续建构自感觉用起来顺手些的自定义模块和类的代码。

今天经过反复折腾,最终基本上算是比较好地完成了这个在同一数据库中复制数据表的函数,且同一函数支持目前研究的四种数据库(mysql,mssql,access,sqlite).

一、首先是到今天完成为止的_mdb.py文件中的全部内容:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import pypyodbc

import pymysql

import pymssql

import sqlite3

import os.path

import _mty

mdbErrString='' #供其它模块使用的全局变量了,实时保存了各函数执行时的错误信息

def msgbox(info,titletext='孤荷凌寒的DB模块对话框QQ578652607',style=0,isShowErrMsg=False):

return _mty.msgboxGhlh(info,titletext,style,isShowErrMsg)

#连接网络数据库,目前支持mssql,mysql

def conNetdbGhlh(serveraddress,usr,pw,dbname,dbtype='mssql',isShowMsg=False):

'''

用于连接网络数据库,目前支持连接mssql,mysql两种网络关系型数据库,

dbtype可选形参默认值是操作mssql,如果要连接Mysql则通过此可选形参指定:为mysql

,此函数返回一个connect数据库连接对象

'''

global mdbErrString

mdbErrString=''

try:

if dbtype=='mssql':

con=pymssql.connect(serveraddress,usr,pw,dbname,charset='utf8')

return con

elif dbtype=='mysql':

con=pymysql.connect(serveraddress,usr,pw,dbname)

return con

else:

return None

except Exception as e:

mdbErrString='连接网络数据库【' + serveraddress + '】【' + dbname + '】时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建,QQ578652607'

if isShowMsg==True:

msgbox(mdbErrString)

return None

else:

pass

finally:

pass

#连接本地数据库文件,目前支持db,mdb,accdb,s3db

def conLocaldbGhlh(dbfilepath,strPass='',isShowMsg=False):

'''

连接本地数据库文件,目前支持mdb,accdb,以及sqlite数据库文件,识别方法是,如果有后缀mdb或accdb,则说明是access数据库文件,否则都认为是sqlite数据库文件。

如果连接成功,将返回一个con数据库连接对象

'''

global mdbErrString

mdbErrString=''

try:

strhznm=_mty.getFilehzGhlh(dbfilepath)

if strhznm.find('mdb')>-1 or strhznm.find('accdb')>-1:

#---连接access数据库----

if strPass=='':

strname='Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + dbfilepath

else:

strname='Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + dbfilepath + ';Pwd=' + strPass

con=pypyodbc.connect(strname)

return con

else:

#----连接sqlite数据库-----

con=sqlite3.connect(dbfilepath)

return con

except Exception as e:

mdbErrString='连接网络数据库文件【' + dbfilepath + '】时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建qq号是578652607'

if isShowMsg==True:

msgbox(mdbErrString)

return None

else:

pass

finally:

pass

#删除数据库中的表

def delTableGhlh(con,strtablenm,isShowMsg=False):

'''

此方法将删除指定conn中的table,不管table中是否有数据,因此 操作要谨慎

,成功返回True 失败返回False

'''

global mdbErrString

mdbErrString=''

try:

if strtablenm is not None and strtablenm != '':

sql = 'DROP TABLE ' + strtablenm

cur=con.cursor()

cur.execute(sql)

con.commit()

cur.close()

if isShowMsg==True:

msgbox('删除数据库表[{}]成功!'.format(strtablenm))

return True

else:

if isShowMsg==True:

msgbox('the [{}] is empty or equal None!'.format(sql))

return False

except Exception as e:

mdbErrString='删除数据库中表【' + strtablenm + '】时出错:' + str(e) + '\n此函数由【孤荷凌寒】创建qq号是578652607'

if isShowMsg==True:

msgbox(mdbErrString)

return False

else:

pass

finally:

pass

#创建一个新表

def newTableGhlh(con,strTableNm,lstnm:'list. 将所有要新建的字段都放在一个列表中',lsttype,lstlength,dbtype='acc',lstNull=None,isDelExitsTable = False ,isAutoSetIDfieldAutoNumber=True,strSetFieldAutoNumberName='id',isShowMsg= False):

'''

传递有关表的每个字段的三大属性的分别的三个列表,

并可以指定此表的PRIMARY key 字段,

及指定是否自动识别ID字段为PRIMARY key 字段,

如果要创建的表名是否存在,约定是否删除旧表

如果设置为不删除旧表,则放弃新建表;

'''

global mdbErrString

mdbErrString=''

try:

cur=con.cursor()

dbtype=dbtype.lower()

if dbtype=='access':

dbtype='acc'

except:

pass

#--------------------------------------------------------

try:

if strTableNm == "" or strTableNm.lower() == "select" or strTableNm.lower() == "from" or strTableNm.lower() == "where" or strTableNm.lower() == "order" or strTableNm.lower() == "insert" or strTableNm.lower() == "delete" or strTableNm.lower() == "in" or strTableNm.lower() == "with" or strTableNm.find("[") >-1 or strTableNm.find("]") >-1 :

mdbErrString = "要创建的数据表名为空或为不合法的保留关键字,请重新确认数据表名。" + '\n此函数由【孤荷凌寒】创建qq是578652607'

if isShowMsg == True:

msgbox(mdbErrString)

return False

if len(lstnm) != len(lsttype) or len(lsttype) != len(lstlength):

mdbErrString = "在新建一个数据表时,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值