找回密码
 注册
查看: 44|回复: 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):' r9 r2 A  @$ G9 s
  File "<input>", line 1, in <module>
! j$ r5 S* a- mImportError: cannot import name 'db' from 'app' (C:\Users\xxxx\pythonProject\venv\lib\site-packages\app\__init__.py)
; \7 b9 u* O5 P; c$ E: C. L* d* b
2 P  Q4 f) p9 i$ g) a& c
遇到问题,我一直没有想过问题在哪里,为什么引入不了这个db% X: e$ x4 E/ V6 F0 Z& N
在python console上执行时一直报错,但视频里却能正常,为什么?  M) n  B8 {5 n& ^" X6 q
>>>from app import db
. G; j2 B' m; t: T9 RTraceback (most recent call last):2 S# E# e. U) V2 m
  File "<input>", line 1, in <module>& Y) J* H2 A* K
ImportError: cannot import name 'db' from 'app' (C:\Users\xxxxx\pythonProject\venv\lib\site-packages\app\__init__.py): b  F+ e# ]: C0 ]

) k8 r; l3 ~3 X. j; ^; I' N解决问题原因:, q! E8 |' ?$ h7 a1 u" Q, f) D( l
一次偶然的问题,一直测试,发现一个问题。我们的xxxx.py 这个flask文件的问题。
0 p! F+ L& V3 P6 H' A0 H4 o5 K我们取名叫什么,就用前面的名称  比如app.py就用app  完整的输入就是from app import db! {8 F( R) _7 P( j

9 g7 d% c7 T% \& z2 X! d# x但我这里的文件名称是appflask.py  那么我们这边就要在执行的时候,输入from appflask import db# ~* a2 e7 F# |5 g8 j% x/ N

0 b! }$ W- _1 g7 K0 N  f2 S1 M>>>from appflask import db
2 R. m0 S( P! aC:\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." i9 l9 C/ X# S" l7 I' i
  warnings.warn(FSADeprecationWarning(
8 W% z$ {6 t! N' m  V! Q0 [, K7 z6 K( F* l: r3 N, L* o  ~! w+ f3 Z8 d" j- B
即可执行后面的db.create_all()等命令了。) U6 H# j, M  p5 Q# z0 j. D' o

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-7-30 08:13:28 | 显示全部楼层
上面的测试结果。来自一个调试的步骤。
# Q2 S: N; ?9 B! l& v  先将上边儿的代码保存到桌面,并命名为hello.py,然后,我们就在数据python shell中来完成相应的操作吧。* L  l; S& D" X) Q7 X
1& q. h6 g' K( G' _% y; U
首先打开cmd执行命令:
  f, d7 O% ]- O6 w7 H' x9 t" s- u1 ]) M6 }% Q2 H' _
python C:\Users\st\Desktop\hello.py shell- A2 v/ W/ n* a9 p# H8 |
$ J, v5 O. o. }! p7 @
打开如下的python shell环境:- [7 G) q' x8 [- L% q* p
hello.py shell
6 W! k* u; C" W  w* G- M3 Z* A- r5 C: d
接下来,我们就来看看如何操作MySQL数据库:
# n* P4 P8 F+ e& s3 n+ k( ]在操作之前先将flask-sqlalchemy的类实例导入:(在上边儿的代码中,我们已经将sqlalchemy的类实例为db,所以我们执行以下操作将其导入:: F7 ?2 h" r4 F; Y7 }
from hello import db% U0 L! y6 g2 z/ i
$ @, l( ^! m% P% \) E  Q

( \/ R9 h9 \( w$ s2 y1、创建表
; Z/ U' m) w! Pdb.create_all()4 J( C  L% F3 }  M& K4 @( M9 R( X
2、删除表/ C$ j  X& B3 E  K, w
db.drop_all()
3 O" b2 i4 h+ v" t8 c4 S
6 a2 `  A+ y, T2 v7 T/ R# c
3 V# G, H3 B/ q  {% ^, w7 @# i4 b3、插入数据' c  x7 J! x+ e2 Z3 h
from hello import User
! |( Z3 R7 ~' p0 W0 Zu = User(username='st',email='st@example.com', passowrd='xxxx')
9 K4 ]6 T1 ~" E! B( Fdb.session.add(u)
% F! u5 e9 r1 j4 Adb.session.commit()
% h9 l! z# f( S& G
  b( v% S3 w' ]4、查询数据
/ b6 N6 l* d- D(1)filter_by查询(精确查询):
3 J2 i+ y1 X) i: J8 q4 H! ?’user= User.query.filter_by(username='st').first()
/ i- h8 n" ?0 x  }6 Q. {" }& c8 T( t6 E/ t* M  g7 K6 M: n- T
* D1 {5 J1 Y4 z5 ?! A  J- p. V
print user
  r/ ~( m0 H! E. s' Z8 ^8 R<User u'st'>" R+ x- |+ X  R; S. I4 Q! c- [
(2)get(主键):(id一般为主键)
1 k1 V, D% a+ r" m0 m4 RUser.query.get(1)2 A: o# |1 `" ]$ ~1 a! d
<User u'st'>. b- s. x* l6 I" }- S! L5 I# ^
(3)filter查询(模糊查询):
0 m- ~  W! O$ r" h. J) SUser.query.filer(User.username.endswith('t')).all()
7 W& v: [0 X* \( p3 \; j7 G% m- h[<User u'st'>]% ~- H$ o, }% I* k4 S  B2 w% ?5 j
3 ]9 T( E" K; i2 _4 K5 }! d
(4)逻辑非查询:1 X  e; |' x# j7 K% o' G  R; l
user = User.query.filter(User.username != 'st').first(). ~8 y% N9 e5 Q4 j& C
print user  b  [$ u, U0 Z3 r- P
<User u'stt'>  W: N0 t) t- v. t  l- M4 T9 c" y
9 q: u3 Y" h; \
from sqlalchemy import not_
9 R  m/ _' p+ V' g, q; T0 Vuser = User.query.filter(not_(User.username == 'st')).first()
4 K: g# }7 _" Qprint user
# Y7 k. O/ t1 R3 s2 x! w5 H+ c# y1 b
<User u'stt'>( E: o" U# L8 n! S- a: K
* g  C6 P% j5 G' ?+ I0 k$ A# c
(5)逻辑与) v0 q" \7 ]% F; j" h, X2 L1 m
from sqlalchemy import and_
! g) V/ Z8 Z# X( Juser = User.query.filter(and_(User.username =='stt', User.email.endswith('@example.com'))).first()) z0 {5 J- l" h% A

4 \5 W( B+ J; D! s" l/ Xprint user) i9 {' v/ C( i% e9 A6 @

1 k# b7 M* h0 T5 w. U<User u'stt'>
5 b! v5 v+ e8 M2 v$ x% Q, ](6)逻辑或
1 i: _& ]6 L  e7 ~  Mfrom sqlalchemy import or_! |( A; O5 W4 k# ?
user = User.query.filter(or_(User.username !='stt', User.email.endswith('@example.com'))).first()
$ M& A5 x: F. W( [( H" t3 n) L, g" e2 W* `* a; H1 v5 Z( c8 Q
9 u" {$ c- }* m$ `4 W4 K& [: Q  c
print user
, o0 c% k7 @) x9 Q- l
4 Y* N6 I. x, z; Y<User u'stt'>
6 f+ k4 O# P5 D1 U1 C' a6 q2 [(7)first()返回查询到的第一个对象
3 ^- P* ^/ z2 }) w5 huser = User.query.first()5 [% ~6 G3 b# w- f* }# r' x
print user: I- @0 P! q! B5 [/ q0 k+ y
% B/ _9 Z+ a8 M/ F4 K* {# q7 H
<User u'st'>
  k0 R- i- w0 U
+ L3 U1 q$ a; O) I4 O(8)all()返回查询到的所有对象9 A9 I9 W) V2 a
user = User.query.first()
- Z. g) d7 T( K) _print user
8 \8 _( T9 l0 k, T. m
& t+ w. p* {1 R& g/ i5、删除数据
3 n- v. `/ N% S1 j$ Y5 `3 Fuser  = User.query.first()
6 o7 K0 E' H/ Z3 Fdb.session.delete(user)
" S9 d4 o$ |3 B' s  z. p& Sdb.session.commit()5 A2 p' N8 b/ n$ M. r
User.query.all()( {! [: c5 t5 k9 }4 {) r) h
[<User u'stt'>]
7 m* A+ O# g- z* o5 h
4 ], ^/ B4 I, d" N6、更新数据
% E6 n9 u' O: U: {1 luser = User.query.first()& l$ m" F9 S, h6 j
user.username = 'ballking'
+ s2 Q: R# h$ z3 \) M: nUser.query.first()% }# J, Q( A0 o& [- L1 s$ a
<User u'ballking'>2 j! F1 H8 H% x' p* v
/ T- R. [5 c5 K
- m# P" O8 u% k* L. C) b

" ]) ]# q9 E& Y9 T
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:32 , Processed in 0.015217 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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