python中day_Python Day12(补充)

1 from sqlalchemy importcreate_engine2 engine=create_engine("mysql+pymysql://root:123@192.168.48.20:3306/test", max_overflow=5) #创建连接,允许溢出5个连接

3 result = engine.execute('select * from student') #使用excute执行原生sql

4 print(result.fetchall()) #获取所有结果,与pymyql类似

事务:

1 from sqlalchemy importcreate_engine2 engine=create_engine("mysql+pymysql://root:123@192.168.48.20:3306/test", max_overflow=5) #创建连接,允许溢出5个连接

3 result = engine.execute('select * from student') #使用excute执行原生sql

4 with engine.begin() as conn: #事务操作

5 conn.execute("insert into student (name, age, res_date) values ('weikang', 33, '1992-11-11')")6

7 print(result.fetchall()) #获取所有结果,与pymyql类似

3.2.创建表

定义数据表,才能进行sql表达式的操作,毕竟sql表达式的表的确定,是sqlalchemy制定的,如果数据库已经存在了数据表还需要定义么?当然,这里其实是一个映射关系,如果不指定,查询表达式就不知道是附加在那个表的操作,当然定义的时候,注意表名和字段名,代码和数据的必须保持一致。定义好之后,就能创建数据表,一旦创建了,再次运行创建的代码,数据库是不会创建的。

sqlalchemy内部组件调用顺序为:使用 Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 进行数据库操作。Engine使用Schema Type创建一个特定的结构对象,之后通过SQL Expression Language将该对象转换成SQL语句,然后通过 ConnectionPooling 连接数据库,再然后通过 Dialect 执行SQL,并获取结果。

TIPS:使用类的方式和使用metadata方式创建表时候区别在于metadata可以不指定主键,而是用class方式必须要求有主键。

demo1:

1 from sqlalchemy importcreate_engine, Table, Column, Integer, String, ForeignKey, MetaData2

3 engine = create_engine("mysql+pymysql://root:123@192.168.48.20:3306/test?charset=utf8",4 encoding="utf-8",5 echo=True,6 max_overflow=5

7 )8 #?charset是字符集编码,echo=True打印输出信息和执行的sql语句默认Flase,max_overflow=5允许溢出连接池连接数量

9 meta = MetaData() #生成源类

10 #定义表结构

11 user = Table('user', meta,12 Column('id', Integer, nullable=True, autoincrement=True, primary_key=True),13 Column('name', String(20), nullable=True),14 Column('age', Integer, nullable=True)15 )16

17 host = Table('host', meta,18 Column('ip', String(20), nullable=True),19 Column('hostname', String(20), nullable=True),20 )21 meta.create_all(engine) #创建表,如果存在则忽视

demo2:

使用orm基类创建

1 from sqlalchemy importcreate_engine, Table, Column, Integer, String, ForeignKey, MetaData, Date2 from sqlalchemy.ext.declarative importdeclarative_base3

4 engine = create_engine("mysql+pymysql://root:123@192.168.48.20:3306/test?charset=utf8",5 encoding="utf-8",6 echo=True,7 max_overflow=5

8 )9 #?charset是字符集编码,echo=True打印输出信息和执行的sql语句默认Flase,max_overflow=5允许溢出连接池连接数量

10 base = declarative_base() #生成ORM基类

11

12

13 #定义表结构

14 classUser(base):15 __tablename__ = 'user' #表名

16 id = Column(Integer, primary_key=True)17 name = Column(String(32))18 age =Column(Integer)19

20 base.metadata.create_all(engine) #创建表,如果存在则忽视

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值