应用Python--问题记录

1、数据库连接池问题:加poolsize = 100解决

 

2、出现的问题:can't multiply sequence by non-int of type 'float'

解决:自己在键盘输入的整数其实并不是正整数,而是字符串形式,需要强制类型转换

 

 3、int(M) M表示的不是数据的最大长度,只是数据宽度,并不影响存储多少位长度的数据;

varchar(M) M表示的是varchar类型数据在数据库中存储的最大长度,超过则不存;

question:int(1)、tinyint(4) 哪个大? 
anwser:int 大。 
注意数字类型后面括号中的数字,不表示长度,表示的是显示宽度,这点与 varchar、char 后面的数字含义是不同的。 
也就是说不管 int 后面的数字是多少,它存储的范围始终是 -2^31 到 2^31 - 1,但是int(1)只显示个位数
综上整型的数据类型括号内的数字不管是多少,所占的存储空间都是一样,n只是用来控制显示而已,如果为int(4),插入一个1,显示时也会用空格补齐到4个字节
说明:tinyint一个字节   smallint两个字节   MEDIUMINT三个字节
 
4、为什么pymysql重连后才能查到新添加的数据
跟当前的事务级别有关系的;当创建查询事务时,事务一直没有进行更新,每次查询到的数据都是之前查询结果的快照,是事务级别的问题,导致查询事务并没有更新,那么针对事务隔离级别进行应对就可以了,在 create_engine 的时候,指定 isolation_level
create_engine(config_url, isolation_level="READ UNCOMMITTED")
 
5、整数乘以浮点数得到的结果与自己算出的结果有细微差别,eg.70*0.01=0.700000000001这种
abs(70*0.01 - 0.7) < 很小的数
 
6、问题描述:You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences - SQL Editor and reconnect.
MySQL运行在safe-update模式下时,非主键条件下是无法执行update或者delete命令的
解决:关闭安全模式,SET SQL_SAFE_UPDATES = 0;
 
7、使用从ScrolledText中获取的字符串作为模糊查询的内容时,要注意获取的内容末尾有一个\n,要把它去掉,否则匹配失败,a.filter(Subject.remark.like('%'+remark.rstrip()+'%'))

 

8、判断Scrolltext中输入的内容

if question.question=="" or question.question=='\n':

    return None

else:

    balabala.......

 

9、显示图片

from PIL import Image,ImageTk

img = 'C:/Users/ys150/Desktop/phone_system/app/images/login.png'
img_open = Image.open(img)
img_png = ImageTk.PhotoImage(img_open)
self.Image2 = tk.Label(self.window, bd=20, height=60, width=600, image=img_png)
self.Image2.pack()

 

10、SQLAlchemy

create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。

sessionmaker() 会生成一个数据库会话类。这个类的实例可以当成一个数据库连接,它同时还记录了一些查询的数据,并决定什么时候执行 SQL 语句。由于 SQLAlchemy 自己维护了一个数据库连接池(默认 5 个连接),因此初始化一个会话的开销并不大。

栗子:

session.add(user)

session.query(User.id)

session.query(User.id).order_by(User.name.desc(), User.id).all()

session.delete(user)

session.commit()

declarative_base() 创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联。
以 User 类为例,它的 __tablename__ 属性就是数据库中该表的名称,它有 id 和 name 这两个字段,分别为整型和 30 个定长字符。Column 还有一些其他的参数,我就不解释了。
最后,BaseModel.metadata.create_all(engine) 会找到 BaseModel 的所有子类,并在数据库中建立这些表;drop_all() 则是删除这些表。

posted @ 2019-06-09 20:23  那古良  阅读(395)  评论(0)    收藏  举报