Python总结之 orm初探
2018-06-27 本文已影响0人
Elvis_zhou
orm的作用
听说可以不用写sql语句就可以实现对数据库的操作(当然这也是orm的作用),于是就有了这篇文章...
下面是简单的代码
from pymysql import connect
class Field(object):
def __init__(self, args):
self.args = args
class ChangeClass(type):
def __new__(cls, class_name, super_name, attrs):
print(attrs)
sql_dict = dict()
for key, value in attrs.items():
if isinstance(value, Field):
sql_dict[key] = value.args
print(sql_dict)
attrs['sql_dict'] = sql_dict
attrs['table_name'] = class_name.lower()
return type.__new__(cls, class_name, super_name, attrs)
class Table(object, metaclass=ChangeClass):
# 把table设置为父类
# # 让此字典自动生成
# # sql_dict = {"id": "int unsigned", "name": "varchar(30)"}
# # 这里是属性,写成键值的形式
# table_name = "kaka"
# # 写成元祖方便区别写入元素,方便查找
# id = ("int unsigned",)
# name = ("varchar(30)",)
# # sql_dict = {"id": id, "name": name}
def create_table(self):
# 1 连接数据库
# 2 操作数据库
# 3 关闭
# 连接数据库
conn = connect(host='localhost', port=3306, database='zxc', user='root', password='mysql', charset='utf8')
# 获取游标
cs1 = conn.cursor()
# 创建字典保存键值关系
sql_list = list()
# 获取字典内的值
for key, values in self.sql_dict.items():
sql_list.append("%s %s" % (key, values))
# sql_list.append(key, values)
# user(id int unsigned, name varchar(20))
# 操作数据库
sql = """ create table if not exists %s(%s) """ % (self.table_name, ",".join(sql_list))
print(sql)
cs1.execute(sql)
# 提交!!!
conn.commit()
# 获取数据
# data = cs1.fetchall()
# 关闭
cs1.close()
conn.close()
def insert(self, **kwargs):
print(kwargs)
# (2.创建列表,我们想要得到的值在调用函数时输入,此时分析一下,输入方式是键值对,所以用**kwargs,接下来就是取出对应的键与值了)
list_key = list()
list_value = list()
# (3.把取出的值放进对应的列表里,这里要注意在数据库中的值都是以)
for key, value in kwargs.items():
list_key.append(key)
list_value.append(""" '%s' """ % str(value)) #这里会出错sequence item 0: expected str instance, int found在另一篇文章会说
#list_value.append(value)
# 连接数据库
conn = connect(host='localhost', port=3306, database='zxc', user='root', password='mysql', charset='utf8')
# 获取游标
cs1 = conn.cursor()
# 操作数据库(1.清楚要获得什么类型的内容-->答案是列表!ok,我们去创建列表)
sql = """insert into %s(%s) values(%s);""" % (self.table_name, ",".join(list_key), ",".join(list_value))
print(sql)
rows = cs1.execute(sql)
# 提交!!!
conn.commit()
# 关闭
cs1.close()
conn.close()
# #################################框架################################################################
class Student(Table):
name = Field('varchar(30)')
num = Field('int')
# class User(Table):
# name = ("varchar(30)",)
# age = ("int",)
def main():
student = Student()
student.create_table()
student.insert(name='zxc', num=22)
if __name__ == '__main__':
main()