使用Python給Mysql資料庫表去重以及排序

2021-09-09 01:10:34 字數 2692 閱讀 7266

removerepetition.py

#!/usr/bin/python2.7  

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

import mysqldb

import sys

def removerepetition(ar**):

host = ar**[0]

username = ar**[1]

password = ar**[2]

dbname = ar**[3]

tablename = ar**[4]

withkey = true

# 連線資料庫

db = mysqldb.connect(host, username, password, dbname, charset='utf8' )

cursor = db.cursor()

try:

# 查詢主鍵

cursor.execute('select column_name from information_schema.`key_column_usage` where table_name=\'%s\' and constraint_name=\'primary\''%tablename)

key = cursor.fetchone()[0]

# 查詢主鍵是否自增,自增忽略主鍵

cursor.execute('select * from information_schema.columns where table_name=\'%s\' and column_name=\'%s\' and extra=\'auto_increment\''%(tablename, key))

withkey = len(cursor.fetchall()) == 0

# 查詢所有欄位名,以逗號分隔

cursor.execute('select group_concat(column_name separator ",") from information_schema.columns where table_schema = \'%s\' and table_name = \'%s\''%(dbname, tablename))

allcols = cursor.fetchone()[0].split(',')

if (not withkey) and (key in allcols):

# 去除主鍵

allcols.remove(key)

# 拼接欄位名

allcolsname = ''

for col in allcols:

allcolsname += col + ','

# 去掉最後乙個逗號

allcolsname = allcolsname[:-1]

# 去重排序查詢

cursor.execute('select distinct %s from %s order by %s'%(allcolsname, tablename, allcolsname))

rows = cursor.fetchall()

# 清空表

cursor.execute('truncate table ' + tablename)

# 重新插入不重複的資料

for row in rows:

values = ''

cursor.close()

for v in row:

cursor = db.cursor()

if isinstance(v, unicode):

values += '\'%s\''%v

elif isinstance(v, str):

values += u'\'%s\''%v

else:

values += str(v)

values += ','

values = values[:-1]

sql = 'insert into %s(%s) values(%s)'%(tablename, allcolsname, values)

print sql

cursor.execute(sql)

cursor.close()

db.commit()

except exception as e:

print e

cursor.close()

db.rollback()

db.close()

if __name__ == '__main__':

try:

removerepetition(sys.ar**[1:])

except exception as e:

print e

removerepetition.bat
@echo off 

cd %~dp0

rem 去重排序是公升序,一般用於資料型別只有字串、數字型別和布林型別的表,其他資料型別沒測試

rem 引數二:root, 資料庫使用者名稱

rem 引數三:111111, 資料庫密碼

rem 引數四:dbname , 資料庫名稱

rem 引數五:tablename, 資料庫表名

python removerepetition.py 127.0.0.1 root 111111dbname tablename

pause

echo exit

python3 flask 使用Mysql資料庫

建立flask基本專案結構 from flask import flask安裝flask sqlalchemy pip install flask sqlalchemy匯入配置 from flask sqlalchemy import sqlalchemypython3 不再支援mysqkdb,連線...

如何使用pyflakes給python做語法檢查

python是一門動態語言。在給python傳引數的時候並沒有嚴格的型別限制。寫python程式的時候,發現錯誤經常只能在執行的時候發現。有一些錯誤由於隱藏的比較深,只有特定邏輯才會觸發,往往導致需要花很多時間才能將語法錯誤慢慢排查出來。其實有一些錯誤是很明顯的,假如能在寫程式的時候發現這些錯誤,就...

如何使用pyflakes給python做語法檢查

如何使用pyflakes給python做語法檢查 costaxu的個人頁面 開源中國社群 如何使用pyflakes給python做語法檢查 python是一門動態語言。在給python傳引數的時候並沒有嚴格的型別限制。寫python程式的時候,發現錯誤經常只能在執行的時候發現。有一些錯誤由於隱藏的比...