-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathorm.py
More file actions
155 lines (143 loc) · 4.34 KB
/
Copy pathorm.py
File metadata and controls
155 lines (143 loc) · 4.34 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# import pymysql
#
# class Field(object):
# def __init__(self,name,column_type):
# self.name = name
# self.column_type = column_type
# def __str__(self):
# return "<%s:%s>"%(self.name,self.column_type)
#
# class StringField(Field):
# def __init__(self,name,column_type):
# super(StringField,self).__init__(name,column_type)
# self.name=name
# self.column_type='varchar(100)'
#
# class IntegerField(Field):
# def __init__(self,name):
# super(IntegerField,self).__init__(name,"int")
#
# class ModelMetaClass(type):
# def __new__(cls, name,bases,attrs):
# '''
# :param name: 类的名称
# :param bases: 类的继承
# :param attrs: 类的属性
# :return:
# '''
# if name == "Model":
# return type.__new__(cls,name,bases,attrs)
# mapping = dict() #空字典
# for k,v in attrs.items(): #遍历属性
# if isinstance(v,Field): #判断属性是否Field的实例
# mapping[k] = v #添加到mapping当中
# for k in mapping.keys(): #返回所有键
# attrs.pop(k) #从属性当中删除
# attrs["__mapping__"] = mapping #设定__mapping__属性来保存字段
# attrs["__table__"] = name
# return type.__new__(cls,name,bases,attrs)
#
# class Model(dict,metaclass = ModelMetaClass):
# def __init__(self,**kwargs):
# self.db = pymysql.connect(
# host = "localhost",
# user = "root",
# password = "123",
# database = "test"
# )
# self.cursor = self.db.cursor()
# super(Model,self).__init__(**kwargs)
#
# def __getattr__(self, key):
# return self[key]
#
# def __setattr__(self, key, value):
# self[key] = value
#
# def save(self):
# fields = [] #空列表用来存储字段
# args = [] #空列表用来存储字段的值
# for k,v in self.__mapping__.items():
# fields.append(v.name)
# args.append(getattr(self,k,None))
# print(fields)
# sql = "insert into %s(%s) values (%s)"%(
# self.__table__,
# ",".join(fields),
# ",".join([repr(str(i)) for i in args]
# )) #sql拼接
# self.cursor.execute(sql)
# print(sql)
# def __del__(self):
# '''
# 回收内存
# '''
# self.db.commit()
# self.cursor.close()
# self.db.close()
#
# class Student(Model):
# name = StringField("name",'num')
# room_id = IntegerField("room_id")
#
# u = Student(name = "老边",room_id = 18)
# u.save()
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
#创建连接实例
db = sqlalchemy.create_engine("mysql+pymysql://root:123@localhost/sqlalchemydb")
#"数据库类型+数据库模块://用户名:密码@主机/库名"
#定义表
#定义一个元类的继承类
base = declarative_base(db)
#开始定义表
class User(base):
__tablename__ = "user"
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32))
if __name__ == "__main__":
base.metadata.create_all(db)
#进行增删改查
#类似于pymysql 的游标 cursor
from sqlalchemy.orm import sessionmaker
#绑定连接
cursor = sessionmaker(bind=db) #得到的时一个类
session = cursor() #实例化
# 增
user = User(
id = 1,
name = "老边"
)
session.add(user)
session.commit()
session.add_all([
User(id = 2, name = "老赵"),
User(id = 3, name = "老李")
])
session.commit()
#查
all_data = session.query(User).all() #查所有
print(all_data) #得到对象
for data in all_data:
print("id:%s__name:%s"%(data.id,data.name))
many_data = session.query(User).filter_by(id = 1) #查多条
data, = many_data
print("id:%s__name:%s" % (data.id, data.name))
for data in many_data:
print("id:%s__name:%s"%(data.id,data.name))
#data = session.query(User).get(ident=3) #查一条,只能以主键查
#print("id:%s__name:%s" % (data.id, data.name))
#删除
#先查询一条
# data = session.query(User).get(ident=3)
# #然后删除
# session.delete(data)
# #然后提交操作
# session.commit()
#改
# 先查询一条
# data = session.query(User).get(ident=2)
# #然后删除
# data.name = "老李"
# #然后提交操作
# session.commit()