找回密码
 注册
查看: 48|回复: 1

调试数据库与环境问题 在pychm上调试代码出现错误from app import db ImportError: cannot import name 'db

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-7-30 02:00:10 | 显示全部楼层 |阅读模式
Traceback (most recent call last):7 a+ m6 ]  [1 y. ^, B/ o/ b
  File "<input>", line 1, in <module>
  U5 z3 y7 X0 q% m( w3 b: WImportError: cannot import name 'db' from 'app' (C:\Users\xxxx\pythonProject\venv\lib\site-packages\app\__init__.py)2 ?+ B, P  C, t  s7 n+ k
9 H3 u# T& V4 ~. j
, @% C! Z1 ?$ n. A1 \
遇到问题,我一直没有想过问题在哪里,为什么引入不了这个db9 H& C4 C- w. x7 u* j
在python console上执行时一直报错,但视频里却能正常,为什么?
8 ?) [# ~3 r& N" {5 S, }# i>>>from app import db* c8 i0 y! ~8 e/ `
Traceback (most recent call last):
9 k. z9 P9 h( p3 ]  File "<input>", line 1, in <module>
: U. `& |9 X! r' c) gImportError: cannot import name 'db' from 'app' (C:\Users\xxxxx\pythonProject\venv\lib\site-packages\app\__init__.py)
; S+ y+ [7 J  J+ Y# R0 S% e# P7 i+ x- a  o' y
解决问题原因:
! Y+ |  N! Z4 R! ?, e. Z' f一次偶然的问题,一直测试,发现一个问题。我们的xxxx.py 这个flask文件的问题。# Q  A% Y& J7 U( c
我们取名叫什么,就用前面的名称  比如app.py就用app  完整的输入就是from app import db
+ k3 |# o9 B9 J8 r, S/ I
1 t7 j' l( l% z2 G# M但我这里的文件名称是appflask.py  那么我们这边就要在执行的时候,输入from appflask import db6 _/ z2 a$ ]& b
$ d2 V. O# N% _# c
>>>from appflask import db7 Y  m$ @, L0 b8 A+ P  k/ O) E7 e
C:\Users\xxxxx\venv\lib\site-packages\flask_sqlalchemy\__init__.py:834: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning./ [1 n( s% I. E+ _2 M
  warnings.warn(FSADeprecationWarning(
3 Z3 J/ O5 {- F* s" t4 y
2 v0 y2 H4 [) F即可执行后面的db.create_all()等命令了。
. O: U: a. o$ L- B6 b% F

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-7-30 08:13:28 | 显示全部楼层
上面的测试结果。来自一个调试的步骤。
% c  }& L, {6 [% J, O  先将上边儿的代码保存到桌面,并命名为hello.py,然后,我们就在数据python shell中来完成相应的操作吧。8 R" A2 M' G7 U2 _$ a
1
( I) E9 d$ ?! Q8 O2 a6 k# [首先打开cmd执行命令:
2 f$ b6 U: ]% F: n2 ~! C* D0 N0 F: ]- U
python C:\Users\st\Desktop\hello.py shell
# I0 p1 n1 q9 D5 [( s* R* p8 S7 g' ^% ?
打开如下的python shell环境:; r0 {! J5 C* L, X! A1 Q( \
hello.py shell
* }* x1 t* v' i7 d% `& f& w7 ~% ^8 J9 X4 G1 O0 b. m" E
接下来,我们就来看看如何操作MySQL数据库:- Q% k4 |5 M: }, Q
在操作之前先将flask-sqlalchemy的类实例导入:(在上边儿的代码中,我们已经将sqlalchemy的类实例为db,所以我们执行以下操作将其导入:
. L/ R' \; x8 S1 k9 n9 A1 f) P# j& xfrom hello import db
2 l$ G) H( `) u) c9 a+ x% l7 r/ j! N0 |7 D& u# s

" A. d: f" @# l/ O4 g% a9 C  \" o* o1、创建表
( `' M  M/ K. b. y) z" W4 n! zdb.create_all()
: n6 ]- R) X* B2 r, D4 C8 E" ?2、删除表
- u+ b. X! q: o8 n& i0 w6 Ddb.drop_all()9 w; W/ j! }% v7 a1 _
$ u- ]. R: L2 I' D8 m' {
5 ?: \+ v- w+ t2 y
3、插入数据, V/ s" q7 ?/ }1 u& D
from hello import User3 i3 l9 h5 y& @0 W5 u/ a
u = User(username='st',email='st@example.com', passowrd='xxxx')- F" P+ A& b: [0 u
db.session.add(u)4 g, j/ F! w" R! Q5 q
db.session.commit()
) @1 a9 k& H' P& o( k# ]2 A7 h5 V, @+ m9 {
4、查询数据9 d& W9 t. n4 D' D
(1)filter_by查询(精确查询):, m4 J$ O" g0 l' N6 m
’user= User.query.filter_by(username='st').first()6 U, i( M3 }1 ^1 E* _0 R
) f* p  c5 O/ B4 C3 X1 ?. a
3 W5 E! p5 Y$ X
print user
" j& M" T1 f) I9 l1 J7 F2 c<User u'st'>. f  K$ D3 e+ _+ ~) x3 t0 j- a
(2)get(主键):(id一般为主键)8 W! ?+ u8 @6 g8 Z
User.query.get(1): s% N% J1 R! _
<User u'st'>
6 h) V. g  X& h2 l) }2 T2 r1 @(3)filter查询(模糊查询):
5 k  h& t% ^0 U# S( k1 RUser.query.filer(User.username.endswith('t')).all()* Y) F- j& S8 s8 ~" J3 F) g, M
[<User u'st'>]% u- t. b3 l3 h* A2 H  g

' S# y: U' T! X0 R(4)逻辑非查询:5 C. ^: ?2 [( D: Y
user = User.query.filter(User.username != 'st').first()% A" C2 T0 p/ ~& h
print user
0 B- x2 A/ N& ?' |<User u'stt'>
8 g7 Z; w' H' ]& O* V) J5 l6 O& C8 X
from sqlalchemy import not_3 d) r/ k% p5 g
user = User.query.filter(not_(User.username == 'st')).first()- r3 I$ F5 K5 p6 K$ N+ ?
print user/ {- B( U; O( c* j+ `
5 p7 U& Q" K3 |2 G/ [4 h6 i# t1 ~
<User u'stt'>
/ s1 N; L/ Y6 V3 s" q' J$ C" s" ^! t# T1 p+ x
(5)逻辑与
9 j& ]4 G5 o6 A1 Zfrom sqlalchemy import and_; G. X, p; s: D& s
user = User.query.filter(and_(User.username =='stt', User.email.endswith('@example.com'))).first()4 n6 }. s/ P. g
, W  O: k  R% I$ G3 h/ C
print user
8 U) ^0 [4 b6 ~1 l: i, x: V. Y) {; j  F4 B9 h# ]9 R0 r
<User u'stt'>
3 ^( ]# z" p. V, [( Q(6)逻辑或
8 l% {$ N, O9 O# `; x- K$ Vfrom sqlalchemy import or_
2 _. l. U0 g6 K  ~5 t% Luser = User.query.filter(or_(User.username !='stt', User.email.endswith('@example.com'))).first()
: E1 Y; Z0 d) E6 b; a1 d6 b
2 N* N2 n2 U6 V9 F# M1 ~2 y$ S: [3 F! a5 t7 ?
print user
! y6 W  c6 h& G" W; W6 i" h9 o; y7 a2 `, Q* l) l
<User u'stt'>
0 \1 p1 E' `2 n8 X/ g(7)first()返回查询到的第一个对象
& y; @/ A, p3 z/ Suser = User.query.first()' s, O7 ^" R5 }$ V0 Y" q5 c; E; o
print user& p7 w5 d7 }; J0 R2 Y: ~1 k

" i7 B. {! |# g<User u'st'>: z1 Y  v" s* R- q
2 L, Q( K' [# i1 Y: l" q* s
(8)all()返回查询到的所有对象
, R  }! {- X% h3 K6 B6 t) A; F1 vuser = User.query.first()
" ?& H& x: v) B! h4 f% dprint user4 Z5 M. s; }4 P5 \- [" r
, s) n' d+ h; X$ o& u
5、删除数据
6 l* \0 h! L* i3 e$ {- juser  = User.query.first()% Y2 }! i/ M1 X, q5 c( }
db.session.delete(user)
* j0 k! P, C) L7 ^3 x) a1 x1 w& ldb.session.commit()- j3 C9 A/ R& ?$ f
User.query.all()5 y# b" b) O0 z% q; m
[<User u'stt'>]
7 v# l# ]/ {; i
( J& k. E4 D/ u; @7 I6、更新数据$ ]* }3 ~( i% U! \5 e( S
user = User.query.first()
5 T) _/ r. K9 iuser.username = 'ballking'9 H5 Y: r, c7 i1 o* v
User.query.first()6 ~1 V2 g& D9 ?/ d" F8 t
<User u'ballking'>+ n4 W8 [. D6 W3 w2 i

9 j; v# E" T; v: ]: {
- u6 G* \7 y: W, C8 {) W3 Q0 D; @* `! t2 n+ {% G4 w
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 03:50 , Processed in 0.013914 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表