def insert(self, **kwargs):
print(kwargs)
# 循环去我们的字典中去拼接一个字段列表,一个值列表
field_list = list()
value_list = list()
for key, value in kwargs.items():
field_list.append(key)
value_list.append(""" '%s' """ % str(value)) # 这个字符串里面加引号
# 1 连接数据
# 创建Connection连接
conn = connect(host='localhost', port=3306, database='jing_dong', user='root', password='mysql', charset='utf8')
# 获得Cursor对象
cs1 = conn.cursor()
# 2.执行sql语句
sql = """ insert into %s(%s) values(%s); """ % (self.table_name, ",".join(field_list), ",".join(value_list))
print(sql)
cs1.execute(sql)
# 提交
conn.commit()
# 3.关闭
cs1.close()
conn.close()
def insert(self, **kwargs):
print(kwargs)
# 循环去我们的字典中去拼接一个字段列表,一个值列表
field_list = list()
value_list = list()
for key, value in kwargs.items():
field_list.append(key)
value_list.append(""" '%s' """ % str(value)) # 这个字符串里面加引号
# 1 连接数据
# 创建Connection连接
conn = connect(host='localhost', port=3306, database='jing_dong', user='root', password='mysql', charset='utf8')
# 获得Cursor对象
cs1 = conn.cursor()
# 2.执行sql语句
sql = """ insert into %s(%s) values(%s); """ % (self.table_name, ",".join(field_list), ",".join(value_list))
print(sql)
cs1.execute(sql)
# 提交
conn.commit()
# 3.关闭
cs1.close()
conn.close()
fields_dict = {"uid": "int unsigned", "pwd": "varchar(30)"}
table_name = "abc"
for key, value in self.fields_dict.items():
fields_list.append("%s %s" % (key, value))
# 2.执行sql语句
# sql = """ CREATE TABLE IF NOT EXISTS user(uid int unsigned,name varchar(30),email varchar(30),password varchar(30)); """
sql = """ CREATE TABLE IF NOT EXISTS %s(%s); """ % (self.table_name, ",".join(fields_list))
print(sql)
还是很繁琐,我们就祭出大招,用元类去创建我们的字典。
class ChangeClass(type):
def __new__(cls, class_name, super_names, attrs):
print(attrs)
# 一个新的字典
fields_dict = dict()
# 去我们的属性字典,判断如果是元组的,那么就是我们写的属性
for key, value in attrs.items():
if isinstance(value, tuple):
# 到这里说明是我们定义的属性
fields_dict[key] = value[0]
# 添加到我们的属性字典中
attrs['fields_dict'] = fields_dict
return type.__new__(cls, class_name, super_names, attrs)
# 元类让我们的写法很爽,用的时候也很爽
class User(object, metaclass=ChangeClass):
uid = ("int unsigned",)
name = ("varchar(30)",)
age = ("int",)
info = ("varchar(30)",)
# fields_dict = {"uid": "int unsigned", "pwd": "varchar(30)"}
table_name = "user"
因为之前我们的属性值是字符串,所以我们将他们改造为元组,然后通过遍历元类中的attrs,用isinstance去判断属性值是否是元组,如果是通过value[0]去获取元组内的值,添加到属性字典中。但是这样感觉还不是很爽,如果换一张表,又要重新写创建表的代码,所以我又想到了下面一个办法,我们可以把共同的方法抽取到一个父类中,在属性字典中添加表名,表名就是类名attrs['table_name'] = class_name。然后将原来的class User():改为class table():
class Student(Table):
name = ("varchar(30)",)
age = ("int",)
通过一个子类去继承它,甚至我们可以用创建一个Field类去控制它,让我们能将
name = ("varchar(30)",)
改为
name = Field("varchar(30)"
然后定义一个Field的方法
class Field(object):
def __init__(self, args):
self.args = args
class ChangeClass(type):
def __new__(cls, class_name, super_names, attrs):
print(attrs)
# 一个新的字典
fields_dict = dict()
# 去我们的属性字典,判断如果是元组的,那么就是我们写的属性
for key, value in attrs.items():
if isinstance(value, Field):
# 到这里说明是我们定义的属性
fields_dict[key] = value.args
def insert(self, **kwargs):
print(kwargs)
# 循环去我们的字典中去拼接一个字段列表,一个值列表
field_list = list()
value_list = list()
for key, value in kwargs.items():
field_list.append(key)
value_list.append(""" '%s' """ % str(value)) # 这个字符串里面加引号
# 1 连接数据
# 创建Connection连接
conn = connect(host='localhost', port=3306, database='jing_dong', user='root', password='mysql', charset='utf8')
# 获得Cursor对象
cs1 = conn.cursor()
# 2.执行sql语句
sql = """ insert into %s(%s) values(%s); """ % (self.table_name, ",".join(field_list), ",".join(value_list))
print(sql)
cs1.execute(sql)
# 提交
conn.commit()
# 3.关闭
cs1.close()
conn.close()
def main():
user = User()
user.create_table()
user.insert(age=100, name="oldyang")
student = Student()
student.create_table()
student.insert(name="python11")