forked from octans/PythonPractice
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmysql.py
97 lines (76 loc) · 2.6 KB
/
mysql.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import pymysql
def addslashes(s):
try:
d = {'"': '\\"', "'": "\\'", "\0": "\\\0", "\\": "\\\\"}
return ''.join(d.get(c, c) for c in s)
except:
return s
class Mysql():
def __new__(cls, **params):
cls.connect(**params)
return cls
def __del__(cls):
cls.close()
@classmethod
def connect(cls, **params):
cls.conn = pymysql.connect(**params)
cls.cursor = cls.conn.cursor()
cls.cursor.execute("set names utf8mb4")
@classmethod
def close(cls):
cls.cursor.close()
cls.conn.close()
@classmethod
def query(cls, sql, is_dict=0):
if is_dict:
cls.cursor = cls.conn.cursor(pymysql.cursors.DictCursor)
cls.cursor.execute(sql)
return cls
class Model:
sql = ''
def select(self, select_str):
if select_str.find(",") == -1:
select_str = select_str
else:
fields = list()
for f in select_str.split(","):
if f.find('as') > 0:
p = f.split(" as ")
fields.append(p[0].strip() + ' as `' + p[1].strip() + '`')
else:
fields.append('`' + f.strip() + '`')
select_str = ",".join(fields)
self.sql = "SELECT " + select_str + " FROM " + self.tbl
return self
def where(self, string):
self.sql = self.sql + " WHERE " + string
return self
def order_by(self, string):
self.sql = self.sql + " ORDER BY " + string
return self
def limit(self, num):
self.sql = self.sql + " LIMIT " + str(num)
return self
def fetch_all(self, is_dict=0):
return self.conn.query(self.sql, is_dict).cursor.fetchall()
def fetch_one(self):
return self.conn.query(self.sql).cursor.fetchone()
def insert(self, data, replace=None):
fields = list()
for a in data.keys():
fields.append('`' + a + '`')
sqlFields = ",".join(fields)
values = list()
for v in data.values():
v = addslashes(v)
v = "\"" + v + "\"" if type(v) is type("a") else str(v)
values.append(v)
sqlValues = ",".join(values)
action = "INSERT" if replace is None else "REPLACE"
sql = action + " INTO " + self.tbl + " (" + sqlFields + ") VALUES (" + sqlValues + ")"
self.conn.query(sql).conn.commit()
def update(self, where, **data):
pass
def delete(self, where='1'):
sql = "DELETE FROM " + self.tbl + " WHERE " + where
self.conn.query(sql).conn.commit()