from sqlalchemy.ext.declarative import declarative_base
# 导入常见数据类型
from sqlalchemy import create_engine,Column,Integer,String,Float,DECIMAL,Boolean,\
Date,DateTime,Time,Text,Enum
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.orm import sessionmaker
from sqlalchemy import func,and_,or_,ForeignKey
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = '123456'
DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)
engine = create_engine(DB_URI)
session = sessionmaker(engine)()
# 1.用`declarative_base`根据`engine`创建一个ORM基类
Base = declarative_base(engine)
# 需求:sqlalchemy中query查询函数可以传递的参数有哪些(3中方式)
'''
1. 模型名。指定查找这个模型中所有的属性(对应查询表为全表查询)。
2. 模型中的属性。可以指定只查找某个模型的其中几个属性。
3. 聚合函数。
* func.count:统计行的数量。
* func.avg:求平均值。
* func.max:求最大值。
* func.min:求最小值。
* func.sum:求和。
`func`上,其实没有任何聚合函数。但是因为他底层做了一些魔术,
只要mysql中有的聚合函数,都可以通过func调用
'''
# class News(Base):
# __tablename__='news'
# id = Column(Integer,primary_key=True,autoincrement=True)
# title =Column(String(50),nullable=False)
# price = Column(Integer)
# content = Column(Text)
#
# def __repr__(self):
# return "<title:%s,price:%s,content:%s>"%(self.title,self.price,self.content)
# Base.metadata.drop_all()
# Base.metadata.create_all()
# 添加测试数据
# for x in range(1,6):
# a = News(title="新闻%s"%x,price =random.randint(1,100))
# session.add(a)
# session.commit()
# 需求:SQLALchemy实现外键及其四种约束讲解
# 主表 / 从表
# user/news
class User(Base):
__tablename__ = 'user'
id = Column(Integer,primary_key=True,autoincrement=True)
uname = Column(String(50),nullable=False)
def __repr__(self):
return "<User(uname:%s)>" % self.uname
class News(Base):
__tablename__ = 'news'
id = Column(Integer,primary_key=True,autoincrement=True)
title = Column(String(50),nullable=False)
content = Column(Text,nullable=False)
# sqlalchemy实现外键方法:四种约束
# RESTRICT
# uid = Column(Integer,ForeignKey("user.id",ondelete='RESTRICT'))
# NO ACTION
uid = Column(Integer,ForeignKey("user.id",ondelete='NO ACTION'))
# NO ACTION
# uid = Column(Integer, ForeignKey("user.id", ondelete='CASCADE'))
# NO ACTION
# uid = Column(Integer, ForeignKey("user.id", ondelete='SET NULL'))
def __repr__(self):
return "<News(title:%s,content=%s)>" % (self.title,self.content)
# 创建表
Base.metadata.drop_all()
Base.metadata.create_all()
# 添加测试数据
user = User(uname='momo')
session.add(user)
session.commit()
#
news1= News(title='AAA',content='123',uid=1)
news2= News(title='BBB',content='456',uid=1)
session.add_all([news1,news2])
session.commit()


老师,我的代码,好像外键添加不上去,运行sql语句,直接删除了user表中内容。