码迷,mamicode.com
首页 > 数据库 > 详细

python——连接mysql

时间:2017-12-14 11:57:27      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:let   none   tab   alc   style   color   pre   bin   img   

 

mysql + ORM:http://www.cnblogs.com/alex3714/articles/5950372.html 

 

sqlalchemy ORM:http://www.cnblogs.com/alex3714/articles/5978329.html

 

Python操作MySQL

使用python创建一个表

 1 from sqlalchemy import create_engine
 2 from sqlalchemy.ext.declarative import declarative_base
 3 from sqlalchemy import Column,Integer,String
 4 from sqlalchemy.orm import sessionmaker
 5 
 6 engine=create_engine(mysql+pymysql://root:123 @localhost/xingedb,encoding=utf-8)
 7 
 8 Base=declarative_base()    #生成orm基类
 9 
10 class user(Base):
11     __tablename__=user    #创建的表名
12     id=Column(Integer,primary_key=True)
13     name=Column(String(32))
14     password=Column(String(64))
15 
16 Base.metadata.create_all(engine)    #创建表结构
17 Session_class=sessionmaker(bind=engine)    #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
18 Session=Session_class()    #生成实例
19 
20 Session.commit()    #保存操作

增、删、改、查
技术分享图片

 1 user_obj=User(name="x54256",password="123")    #
 2 
 3 Session.add(user_obj)
 4 
 5 Session.query(User).filter(User.id == 2).delete()    #
 6 
 7 data= Session.query(User).filter_by(name="x54256").first()    #
 8 print(data)
 9 
10 输出是一个obj: <__main__.User object at 0x000002CD45131D30>
11 
12 在类下面加下面的代码,就会显示具体的数据了
13 
14 def __repr__(self):
15     return "<User(name=‘%s‘,  password=‘%s‘)>" % (
16         self.name, self.password)
17 
18 data= Session.query(User).filter_by(name="x54256").first()    #
19 data.name=alex
20 data.password=abc
21 
22 Session.commit()

其他

1 #获取所有数据
2 print(Session.query(User.name,User.id).all() )
3 
4 #多条件查询
5 objs = Session.query(User).filter(User.id>0).filter(User.id<7).all()
6 
7 #统计和分组
8 Session.query(User).filter(User.name.like("Ra%")).count()

外键关联
技术分享图片

技术分享图片
 1 from sqlalchemy import create_engine
 2 from sqlalchemy.ext.declarative import declarative_base
 3 from sqlalchemy import Column,Integer,String,DATE,ForeignKey
 4 from sqlalchemy.orm import sessionmaker,relationship
 5 
 6 engine=create_engine(mysql+pymysql://root:123@localhost/xingedb,encoding=utf-8)
 7 Base=declarative_base()
 8 
 9 class Student(Base):
10     __tablename__=student
11     id=Column(Integer,primary_key=True)
12     name=Column(String(32),nullable=False)
13     register_date=Column(DATE,nullable=False)
14 
15     def __repr__(self):
16         return <name:%s,register_date:%s >%(self.name,self.register_date)
17 
18 class StudyRecord(Base):
19     __tablename__=study_record
20     id=Column(Integer, primary_key=True)
21     day=Column(Integer,nullable=False)
22     status=Column(String(32),nullable=False)
23     stu_id=Column(Integer,ForeignKey(student.id))
24     student=relationship("Student",backref="my_study_record")
25 
26     def __repr__(self):
27         return <name:%s,day:%s,status:%s,stu_id:%s>%(self.student.name,self.day,self.status,self.stu_id)
28 
29 Base.metadata.create_all(engine)
30 Session_class=sessionmaker(bind=engine)
31 session=Session_class()
32 
33 # s1=Student(name=‘alex‘,register_date="2014-05-21")
34 # s2=Student(name=‘jack‘,register_date="2014-04-21")
35 # s3=Student(name=‘rain‘,register_date="2014-03-21")
36 # s4=Student(name=‘eriv‘,register_date="2012-03-21")
37 #
38 # study_obj1=StudyRecord(day=1,status=‘No‘,stu_id=1)
39 # study_obj2=StudyRecord(day=2,status=‘Yes‘,stu_id=1)
40 # study_obj3=StudyRecord(day=2,status=‘No‘,stu_id=2)
41 # study_obj4=StudyRecord(day=3,status=‘Yes‘,stu_id=2)
42 # study_obj5=StudyRecord(day=1,status=‘Yes‘,stu_id=3)
43 #
44 # session.add_all([s1,s2,s3,s4,study_obj1,study_obj2,study_obj3,study_obj4,study_obj5])
45 
46 stu_obj=session.query(Student).filter(Student.name==alex).first()
47 print(stu_obj.my_study_record)
48 
49 
50 session.commit()
外键关联
技术分享图片
1 stu_obj=session.query(Student).filter(Student.name==alex).first()
2 print(stu_obj.my_study_record)
反查询

多外键关联

many_wk.py

 1 from sqlalchemy import Integer, ForeignKey, String, Column
 2 from sqlalchemy.ext.declarative import declarative_base
 3 from sqlalchemy.orm import relationship
 4 from sqlalchemy import create_engine
 5 
 6 Base = declarative_base()
 7 
 8 class Customer(Base):
 9     __tablename__ = customer
10     id = Column(Integer, primary_key=True)
11     name = Column(String(32))
12     billing_address_id = Column(Integer, ForeignKey("address.id"))
13     shipping_address_id = Column(Integer, ForeignKey("address.id"))
14 
15     billing_address = relationship("Address", foreign_keys=[billing_address_id])    #一定要这样写要不然,添加的时候回找不到
16     shipping_address = relationship("Address", foreign_keys=[shipping_address_id])
17 
18 class Address(Base):
19     __tablename__ = address
20     id = Column(Integer, primary_key=True)
21     street = Column(String(32))
22     city = Column(String(32))
23     state = Column(String(32))
24     def __repr__(self):
25         return <%s,%s,%s>%(self.state,self.city,self.street)
26 
27 engine=create_engine(mysql+pymysql://root:123@localhost/xingedb,encoding=utf-8)
28 Base.metadata.create_all(engine)    #创建表结构

多外键.py

 1 from day_11 import many_wk
 2 from sqlalchemy.orm import sessionmaker
 3 
 4 Session_class=sessionmaker(bind=many_wk.engine)    #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
 5 Session=Session_class()    #生成实例
 6 
 7 # addr1=many_wk.Address(street=‘Tiantongyuan‘,city=‘Changping‘,state=‘BJ‘)
 8 # addr2=many_wk.Address(street=‘Wudaokou‘,city=‘Haidian‘,state=‘BJ‘)
 9 # addr3=many_wk.Address(street=‘Yanjiao‘,city=‘Langfang‘,state=‘HB‘)
10 #
11 # Session.add_all([addr1,addr2,addr3])
12 #
13 # c1=many_wk.Customer(name=‘alex‘,billing_address=addr1,shipping_address=addr2)
14 # c2=many_wk.Customer(name=‘x54256‘,billing_address=addr3,shipping_address=addr3)
15 # Session.add_all([c1,c2])
16 #
17 # Session.commit()    #保存操作
18 
19 data=Session.query(many_wk.Customer).filter(many_wk.Customer.name==alex).first()
20 
21 print(data.name,data.billing_address,data.shipping_address)

多对多关系
orm_m2m.py

 1 from sqlalchemy import Table, Column, Integer,String,DATE, ForeignKey
 2 from sqlalchemy.orm import relationship
 3 from sqlalchemy.ext.declarative import declarative_base
 4 from sqlalchemy import create_engine
 5 
 6 Base = declarative_base()
 7 book_m2m_author = Table(book_m2m_author, Base.metadata,
 8                         Column(book_id,Integer,ForeignKey(books.id)),
 9                         Column(author_id,Integer,ForeignKey(authors.id)),
10                         )
11 
12 class Book(Base):
13     __tablename__ = books
14     id = Column(Integer,primary_key=True)
15     name = Column(String(64))
16     pub_date = Column(DATE)
17     authors = relationship(Author,secondary=book_m2m_author,backref=books)
18 
19     def __repr__(self):
20         return self.name
21 
22 class Author(Base):
23     __tablename__ = authors
24     id = Column(Integer, primary_key=True)
25     name = Column(String(32))
26 
27     def __repr__(self):
28         return self.name
29 
30 engine=create_engine(mysql+pymysql://root:710130520a@localhost/xingedb?charset=utf8)  #这样写就可以输入中文啦
31 Base.metadata.create_all(engine)    #创建表结构

多对多.py

 1 from day_11 import orm_m2m
 2 from sqlalchemy.orm import sessionmaker
 3 
 4 
 5 
 6 Session_class = sessionmaker(bind=orm_m2m.engine)  # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
 7 
 8 s = Session_class()  # 生成session实例
 9 
10 # b1 = orm_m2m.Book(name="跟Alex学Python")
11 # b2 = orm_m2m.Book(name="跟Alex学把妹")
12 # b3 = orm_m2m.Book(name="跟Alex学装逼")
13 # b4 = orm_m2m.Book(name="跟Alex学开车")
14 #
15 # a1 = orm_m2m.Author(name="Alex")
16 # a2 = orm_m2m.Author(name="Jack")
17 # a3 = orm_m2m.Author(name="Rain")
18 #
19 # b1.authors = [a1, a2]   #设定关系
20 # b2.authors = [a1, a2, a3]
21 #
22 # s.add_all([b1, b2, b3, b4, a1, a2, a3])
23 
24 
25 print(--------通过书表查关联的作者---------)
26 book_obj = s.query(orm_m2m.Book).filter_by(name="跟Alex学Python").first()
27 print(book_obj.name, book_obj.authors)
28 
29 print(--------通过作者表查关联的书---------)
30 author_obj = s.query(orm_m2m.Author).filter_by(name="Alex").first()
31 print(author_obj.name, author_obj.books)
32 
33 
34 s.commit()

 

python——连接mysql

标签:let   none   tab   alc   style   color   pre   bin   img   

原文地址:http://www.cnblogs.com/x54256/p/8036762.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!