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()