Python 讀取txt,數據庫連接,批量存入數據庫


Python 第一次用,做個記錄
import textwrap import pymssql
from datetime import datetime, timedelta class Data: # 數據庫連接 server = "" user = "" password = '' database = '' list = [] # 定義列表用來存放SQL語句 def __init__(self, LogFileName): self.LogFileName = LogFileName # 格林時間轉北京時間 def UTCtoBJS(self, UTC): # UTC_format = "%Y-%m-%dT%H:%M:%S.%fZ" BJS_format = "%Y-%m-%d %H:%M:%S" UTC = datetime.strptime(UTC, BJS_format) # 格林威治時間+8小時變為北京時間 BJS = UTC + timedelta(hours=8) BJS = BJS.strftime(BJS_format) return BJS # 批量導入數據庫 def StoreToDatabase(self): try: connect = pymssql.connect(self.server, self.user, self.password, self.database) # 建立連接 if connect: print("連接成功!") cursor = connect.cursor() # 創建一個游標對象,python里的sql語句都要通過cursor來執行 sql = '' # 循環拼接SQL for items in self.list: sql += textwrap.dedent(items) cursor.execute(sql) # 執行sql語句 connect.commit() # 提交 self.list.clear() # 清空 list cursor.close() connect.close() else: print("連接失敗!") except BaseException as ex: print('拋出異常', ex) def main(self): f = open(self.LogFileName, 'r', encoding='UTF-8', errors='replace') lines = f.readlines() self.list.clear() # list全局變量清空 print('開始執行,打印文件名', self.LogFileName) for line in lines: if SourceSite in line: array = line.split(' ', 5) AccessDate = self.UTCtoBJS('%s %s' % (array[0], array[1])) # 時間 SystemPage = array[4][1:len(array[4])] if 'App Store' in SystemPage: # txt記錄一份 可直接刪除 # with open('lucky.txt', "a", encoding='UTF-8') as file: # ”w"代表着每次運行都覆蓋內容 # file.write( # '%s %s %s %s \n' % (time, array[2], array[3], myPageURL)) sql = "INSERT dbo.ChemicalbookAccessData (AccessDate,SourceSite,SystemPage,CreateDate)VALUES(\'%s\',\'%s\',\'%s\',GETDATE());" % ( AccessDate, SourceSite, SystemPage) self.list.append(sql) # list 存儲 SQL 每20條執行一次 if len(self.list) == 20: self.StoreToDatabase() print('每次導入20條數據,導入成功') # 再來一個導入 if len(self.list) > 0: print('再來一個導入%s條數據' % (len(self.list))) self.StoreToDatabase() print('最后一次導入成功') print('------------程序結束執行---------------') if __name__ == '__main__': dateNow = datetime.now().strftime('u_ex%C%m%d.log') # 生成文件名 mm = ChemicalbookAccessData('D:/Projects/' + dateNow) # 直接傳路徑 mm.main()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM