使用元类完成数据库操作

# 做一个创建表
# 插入数据
from pymysql import *


# 这个类就一个作用,字段
class Fileld(object):
def __init__(self, file_type):
self.file_type = file_type

class CreateClass(type):
def __new__(cls, class_name, supers_name, attrs):
print(attrs)


# 判断当前的值如果是元组就是我们要的值,组成一个新的字典
create_params = dict()


# 从原先的字典中取出来
# for key, value in attrs.items():
# # 判断是元组
# if isinstance(value, tuple):
# # 我们要的数据添加进去
# create_params[key] = value[0]  # 取到真实
for key, value in attrs.items():
# 判断是元组
if isinstance(value, Fileld):
# 我们要的数据添加进去
create_params[key] = value.file_type  # 取到真实的数据


# 在原先的字典中添加我们的新字典
attrs['create_params'] = create_params


# 拿到类名
attrs['table_name'] = class_name.lower()  # 全部小写


print(create_params)
return type.__new__(cls, class_name, supers_name, attrs)




class CreateTable(object, metaclass=CreateClass):  # 表名跟类名一致


# uid = Field("int unsigned",) #元组
# name = ("varchar(30)",)
# email = ("varchar(30)",)
# # class_name = ("varchar(30)",)
# password = ("varchar(30)",)


# create_table = {"uid":uid,"name":name,"email":email,"password":password}
# 让系统自动生成



def create(self):
"""创建数据库表"""


# 1. 连接数据
# 创建Connection连接
conn = connect(host='localhost', port=3306, database='stock_db', user='root', password='mysql', charset='utf8')
# 获得Cursor对象
cs1 = conn.cursor()
# 2. 执行sql语句


# 里面所有的字段使用字典生成
# create_dict = {"uid":"int unsigned","name":"varchar(30)","email":"varchar(30)","password":"varchar(30)","class_name":"varchar(30)"}


# 循环去得到字符串
# 存到列表中
fields = list()


for key, value in self.create_params.items():  # 这个字典是我们类创建时自动添加的
fields.append("%s %s" % (key, value))  # 把每个字段写到列表中


print(fields)


# create_sql = """CREATE TABLE IF NOT EXISTS user(uid int unsigned,name varchar(30),email varchar(30),password varchar(30)); """
create_sql = """CREATE TABLE IF NOT EXISTS %s(%s); """ % (self.table_name, ",".join(fields))  # ".".join这个字符串拼接


print(create_sql)


cs1.execute(create_sql);


# 提交
conn.commit()


# 3. 关闭
cs1.close()
conn.close()


def insert(self, **kwargs):
"""这个插入数据"""
# 1. 连接数据
# 创建Connection连接
conn = connect(host='localhost', port=3306, database='stock_db', user='root', password='mysql', charset='utf8')
# 获得Cursor对象
cs1 = conn.cursor()


# 通过字典生成我们的字段
# insert_dict = {"uid":123,"name":"oldyang","email":"test@orm.org","password":"pwdpwd"}


# 定义两个列表
key_list = list()
value_list = list()


print(kwargs)


for key, value in kwargs.items():
# 添加到新的列表
key_list.append(key)
# 判断如果是int那么转成字符串
if isinstance(value, int):
value_list.append(str(value))
else:
value_list.append(""" '%s' """ % value)  # 字符串中显示单引号


# value_list.append(str(value))


# 2. 执行sql语句
# insert_sql = """ insert into user (uid,name,email,password) values (123,'oldyang','test@orm.org','pwd');"""
insert_sql = """ insert into %s (%s) values (%s);""" % (
self.table_name, ",".join(key_list), ",".join(value_list))


print(insert_sql)
cs1.execute(insert_sql);


# 提交
conn.commit()


# 3. 关闭
cs1.close()
conn.close()






##########################################################
# 使用Orm
class User(CreateTable):


uid = Fileld("int unsigned")
name = Fileld("varchar(30)")
email = Fileld("varchar(30)")
password = Fileld("varchar(30)")






class Login(CreateTable):
name = Fileld("varchar(30)")
pwd = Fileld("int unsigned")




def main():
"""主入口"""
user = User()
user.create()
user.insert(name = "python7")




login = Login()
login.create()
login.insert(name = "sy")




if __name__ == '__main__':
main()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值