import MySQLdb #在python3點幾的版本中MySQLdb下載的包為mysqlclient
#輸入連接數據庫的信息並且將信息保存在數據庫和txt文件中,這樣就只需要輸入一次數據庫連接信息
def jianshujuku(self):
datas=[]
print("***請先連接數據庫***")
hosts=str(input("請輸入數據庫連接主機:"))
ports=int(input("請輸入數據庫連接端口:"))
users=str(input("請輸入數據庫用戶名:"))
passwds=str(input("請輸入數據庫密碼:"))
dbs1 = input("請輸入數據庫名稱:")
dbs=str(dbs1)
datas.append(hosts)
datas.append(ports)
datas.append(users)
datas.append(passwds)
datas.append(dbs)
db=MySQLdb.connect(host=hosts,port =ports ,user=users,passwd=passwds,charset="utf8" )
cur = db.cursor()
sql=("create database if not exists {}".format(dbs1))
cur.execute(sql)
db = MySQLdb.connect(host=hosts, port=ports, user=users, passwd=passwds,db=dbs1, charset="utf8")
cur = db.cursor()
sql1 = ("CREATE TABLE 數據庫連接參數 "
"(xuhao varchar(255) DEFAULT NULL,"
"hosts varchar(255) DEFAULT NULL,"
"ports varchar(255) DEFAULT NULL,"
"users varchar(255) DEFAULT NULL,"
"passwds varchar(255) DEFAULT NULL,"
"dbs varchar(255) DEFAULT NULL)"
" ENGINE=InnoDB DEFAULT CHARSET=utf8;")
sql2 = ("insert into 數據庫連接參數 (xuhao,hosts,ports,users,passwds,dbs)values({},'{}',{},'{}','{}','{}')".format(1,hosts, ports ,users,passwds,dbs1))
cur.execute(sql1)
cur.execute(sql2)
cur.close()
db.commit()
db.close()
with open('data.txt', 'w', encoding='utf8') as f:
f.write('{}\n'.format(hosts))
f.write('{}\n'.format(ports))
f.write('{}\n'.format(users))
f.write('{}\n'.format(passwds))
f.write('{}\n'.format(dbs))
f.flush()
f.close()
#程序啟動時判斷是否有連接數據
def indexs(self):
try:
with open('data.txt', 'r', encoding='utf8') as f:
f.seek(0)
ress = []
for i in range(5):
res1 = f.readline()
ress.append(res1)
return 2000
except Exception:
return 1000
#更新數據庫連接信息
def xiugaishujuku(self):
try:
xiugaiming=input("請輸入想修改的地方(可選擇主機、端口、用戶名、密碼、數據庫名):")
value=input("請輸入修改的值:")
with open('data.txt', 'r', encoding='utf8') as f:
f.seek(0)
ress = []
for i in range(5):
res1 = f.readline()
ress.append(res1)
datas=ress
values='{}'.format(value)+'\n'
if xiugaiming=='主機':
datas[0]=values
elif xiugaiming=='端口':
datas[1]=values
elif xiugaiming == '用戶名':
datas[2] = values
elif xiugaiming=='密碼':
datas[3]=values
elif xiugaiming=='數據庫名':
datas[4]=values
else:
print("***您的輸入有誤***\n")
with open('data.txt', 'w', encoding='utf8') as f:
f.writelines(datas)
f.flush()
with open('data.txt', 'r', encoding='utf8') as f:
f.seek(0)
res2 = []
for i in range(5):
res1 = f.readline()
res = res1[0:len(res1) - 1]
res2.append(res)
f.close()
mysql.link("update 數據庫連接參數 set hosts='{}',ports={},users='{}',passwds='{}',dbs='{}'where xuhao=1".format(res2[0],res2[1] ,res2[2],res2[3],res2[4]))
print("***您的主機為{},端口為{},用戶名為{},密碼為{},數據庫名為{}***\n".format(res2[0],res2[1],res2[2],res2[3],res2[4]))
except Exception:
print("***連接錯誤***\n")
#創建一個方法對數據庫進行操作
def link(sql):
with open('data.txt', 'r', encoding='utf8') as f:
f.seek(0)
ress = []
for i in range(5):
res1 = f.readline()
res = res1[0:len(res1) - 1]
ress.append(res)
f.close()
datas=ress
db=MySQLdb.connect(host=datas[0],port =int(datas[1]) ,user=datas[2],passwd=datas[3],db =datas[4],charset="utf8" )#host:主機名;port:數據庫端口;user:用戶名;passwd:密碼;db:數據庫名
cur = db.cursor()#創建游標對數據庫進行操作
cur.execute(sql) #使用excute方法執行sql語句
result = cur.fetchall()# 獲取所有記錄列表
cur.close()#關閉游標
db.commit()#提交到數據庫執行
db.close()#關閉數據庫連接
return result
#python建立數據庫表
def jianbiao_chuku(self):
mysql.link("CREATE TABLE 出庫 "#出庫是庫名稱
"(xuhao varchar(255) DEFAULT NULL,"#xuhao是一個列名,vaechar是字符屬性,255是字符長度
"mingcheng varchar(255) DEFAULT NULL,"
"fahuodi varchar(255) DEFAULT NULL,"
"fahuoshang varchar(255) DEFAULT NULL,"
"jinjia varchar(255) DEFAULT NULL,"
"danjia varchar(255) DEFAULT NULL,"
"chajia varchar(255) DEFAULT NULL,"
"zhongliang varchar(255) DEFAULT NULL,"
"zongjia varchar(255) DEFAULT NULL,"
"huoli varchar(255) DEFAULT NULL,"
"weizhi varchar(255) DEFAULT NULL,"
"chukuriqi varchar(255) DEFAULT NULL,"
"dingdanbianhao varchar(255) DEFAULT NULL,"
"lishidingdanbianhao varchar(255) DEFAULT NULL)"
" ENGINE=InnoDB DEFAULT CHARSET=utf8;")
#創建一個萬能的建表方法,只需要手動輸入列表名和表名自動創建表格
def jianbiao_jiandan(self):
name = input("請輸入表名:")
data = []
datas = []
leibiaoshu = int(input("請輸入列表名的數量:"))
n = 0
for i in range(0, leibiaoshu):
n += 1
leibiaoming = input("請輸入第{}個列表名:".format(n))
data.append(leibiaoming)
for x in data:
data1 = "{} varchar(255) DEFAULT NULL".format(x)
datas.append(data1)
a="{},".format(datas[0])
for y in range(1, leibiaoshu-1):
a=a+ '{},'.format(datas[y])
a='{}{}'.format(a,datas[leibiaoshu-1])
try:
result = mysql.link("select * from {}".format(name))
if len(result) > 0:
print("***該表格已存在,請重新創建表格***")
except Exception:
mysql.link("CREATE TABLE {} ({}) ENGINE=InnoDB DEFAULT CHARSET=utf8;".format(name,a))
result=mysql.link("select * from {}".format(name))
if result==():
print("***表格({})創建成功***\n".format(name))
else:
print("***表格({})創建失敗***\n".format(name))
#數據庫在python中的增刪改查語句
class outbound:
def add_outbound(xuhao,mingcheng,fahuodi):#增加
mysql.link("insert into 出庫 (xuhao,mingcheng,fahuodi)values({},'{}','{}')".format(xuhao,mingcheng,fahuodi))
def del_outbound(xiugaineirong,value):#刪除
mysql.link("delete from 出庫 where {} = '{}'".format(xiugaineirong,value))
def cha_outbound(beixiugaiduixiangming,value,xuhao):#修改
mysql.link("update 出庫 set {}= '{}'where xuhao ={}".format(beixiugaiduixiangming,value,xuhao))
def che_outbound(biechazhaoduixiang, value):#查找
result = mysql.link("SELECT * FROM 出庫 where {}='{}'".format(biechazhaoduixiang,value))