找回密码
 注册
查看: 47|回复: 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):. Z, Z3 n# m% A3 `) y( G- X
  File "<input>", line 1, in <module>7 |, t8 q4 G3 j# Z3 b' U
ImportError: cannot import name 'db' from 'app' (C:\Users\xxxx\pythonProject\venv\lib\site-packages\app\__init__.py)( t+ ^9 F! v  `/ ^1 n! x) g, A5 f
$ n5 `. u) L! _2 J7 U
$ u8 v7 O& `6 K* f
遇到问题,我一直没有想过问题在哪里,为什么引入不了这个db
: A' \* {! `# V5 l) z- }在python console上执行时一直报错,但视频里却能正常,为什么?. @+ w( C; s) o. a, V' n
>>>from app import db
2 k% x6 g: v/ m0 |Traceback (most recent call last):
5 ]) U4 ?' E0 r) k  V9 L  File "<input>", line 1, in <module># a/ q/ g* |: Z
ImportError: cannot import name 'db' from 'app' (C:\Users\xxxxx\pythonProject\venv\lib\site-packages\app\__init__.py)- Y9 M- v8 R2 \& a

9 H0 [" |; G( J, s+ O* X解决问题原因:
8 Y5 X1 s4 S% S( C1 p/ l一次偶然的问题,一直测试,发现一个问题。我们的xxxx.py 这个flask文件的问题。
9 j3 q/ {# A2 [/ E' O我们取名叫什么,就用前面的名称  比如app.py就用app  完整的输入就是from app import db
* C) l/ O/ M3 k, T; S! o7 g
7 r8 L( _1 \0 h% `但我这里的文件名称是appflask.py  那么我们这边就要在执行的时候,输入from appflask import db
9 }$ T% T/ d" l( d, `; ^( D9 n0 r: R: V9 ]2 {% h. D
>>>from appflask import db
) m# f" C9 }# z8 }9 R/ {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.* d1 `& Y% x/ T: y! w4 y, B/ c
  warnings.warn(FSADeprecationWarning(
, h8 ^6 U7 ?0 u. ]6 E; w4 o6 E" u
, ]& Q: ^) y% b& X! J  [即可执行后面的db.create_all()等命令了。. H# k: d# f8 W" \* f

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-7-30 08:13:28 | 显示全部楼层
上面的测试结果。来自一个调试的步骤。
/ A! |9 l( o/ Y. F3 t  先将上边儿的代码保存到桌面,并命名为hello.py,然后,我们就在数据python shell中来完成相应的操作吧。
9 B0 h1 L6 M7 q4 g0 c1: U4 M$ ~* C$ ]) o7 [' J$ S
首先打开cmd执行命令:1 ?  S0 Q# v6 |% \- x6 ~3 N' y% ~

+ K1 o& I  d2 I( i  Tpython C:\Users\st\Desktop\hello.py shell  @. g; Z: R  ^4 d8 l! X
0 I2 U2 G2 u2 D/ d
打开如下的python shell环境:4 r5 x  [0 [6 |, z% x; }" y& `
hello.py shell$ _6 b6 u0 {- w0 \$ }1 }% @

) X; P$ I# N7 q接下来,我们就来看看如何操作MySQL数据库:
$ Y6 h. g% F$ _" O0 R( X) R& n# ~1 J在操作之前先将flask-sqlalchemy的类实例导入:(在上边儿的代码中,我们已经将sqlalchemy的类实例为db,所以我们执行以下操作将其导入:+ P/ L2 y5 ^& i
from hello import db: E6 Y: s1 e: B8 m2 W
# ]& a$ {8 s5 o! V) r$ a1 [  J/ H$ e2 y
2 B; E, Y2 c$ H6 Y: r  I% \
1、创建表
6 ~$ [0 G- |: ~& H( q, R% sdb.create_all()0 U7 k* y3 c* ^+ f6 \& H
2、删除表
1 Y% e% j8 Y. ]$ O! G0 bdb.drop_all()# o: D, \+ {+ w
7 _/ a$ d0 V  ^1 R) d

1 T- _# K6 G6 W9 i& x1 D  P3、插入数据% {: r* @4 N6 C, @  _, G2 N
from hello import User
( J$ U1 j  Z! Lu = User(username='st',email='st@example.com', passowrd='xxxx')6 b6 G: b) _. Z4 }/ A
db.session.add(u)' G" G' T) p" w6 Z$ y
db.session.commit()
+ Z0 Z4 P7 t% Y4 C$ \$ `8 a  l5 U- B* B% N5 m
4、查询数据3 d2 I9 x1 V) N# t
(1)filter_by查询(精确查询):
* Q/ ^! i7 Y% X4 h’user= User.query.filter_by(username='st').first()- G% m8 Q+ I" b
0 |4 I0 R) w% W3 F5 C8 |- L

3 H  ?2 _9 E) z; Lprint user$ U5 K- `( N  U) |! y, r- Y
<User u'st'>
3 k4 q. J4 B* T1 U(2)get(主键):(id一般为主键)
7 T5 c# J. ~8 XUser.query.get(1)" |9 O8 T8 ]2 J1 J+ M8 Z* @9 _
<User u'st'>7 j5 b% y7 N2 ~" H# L. ]7 o
(3)filter查询(模糊查询):$ Y& @2 }3 _: g. ?
User.query.filer(User.username.endswith('t')).all()
4 j6 {; D  r  D/ e4 s& Q  m[<User u'st'>]
9 m# {9 G! q0 Z
9 ]2 P& [- t# x0 }  L(4)逻辑非查询:
8 T/ M0 G  q$ }: L( Kuser = User.query.filter(User.username != 'st').first()0 _+ P+ {: g1 o( T6 y
print user, }: q5 w1 k/ s% W1 @  Q  J/ Z; T
<User u'stt'>* Z. y( j9 R4 l3 W8 I
: P  u4 o& y- I. d  H  p
from sqlalchemy import not_
/ _' m& g/ {  Q" I* luser = User.query.filter(not_(User.username == 'st')).first()* g8 u, a8 g" R- p7 c2 g5 ^, G
print user6 i) e: b1 o+ U/ f
0 L+ e3 X' z! Y7 j) L3 s
<User u'stt'>
5 v3 k! L# A& q4 N1 I: O, n
$ v4 p5 A+ {, B% R% s; m4 ^(5)逻辑与
6 u8 b# W/ {2 E* W/ o) @5 Cfrom sqlalchemy import and_1 F- ?" q" I( y$ N. E1 e' ]
user = User.query.filter(and_(User.username =='stt', User.email.endswith('@example.com'))).first()
3 ^! ?/ f3 }+ L% w. W2 k9 o
! ]1 W$ T+ d+ I# R7 N7 v, `; Vprint user  G) E7 {$ F7 [/ W

0 G, X5 @- X, x  P4 t<User u'stt'>6 w7 N+ q. V( t
(6)逻辑或
; ^, m) [, k- Q$ j+ ~from sqlalchemy import or_
/ ~' ^* M* [2 B0 T8 Zuser = User.query.filter(or_(User.username !='stt', User.email.endswith('@example.com'))).first()
( X. S4 t, k. E) G4 o, x/ W9 p- S  {# s- z3 V, K) T

/ v7 p9 \* z/ L7 ~, k, t6 a5 Q/ Wprint user
5 @) w: K+ S! {4 T8 ]" E. t6 ?/ ~+ C2 J% Q+ D& C
<User u'stt'>/ B1 y9 F2 }- a4 i3 j2 |
(7)first()返回查询到的第一个对象3 t6 U/ {$ R" M$ o. v- ^
user = User.query.first()( j! `  x) w  I0 `0 I" V8 V
print user
8 ?4 F# E: i0 M" B  x1 u3 O, V" n4 A
<User u'st'>
; \$ Y7 k7 G) g  M: e9 [8 H3 [) i9 B! T. I" [- K
(8)all()返回查询到的所有对象( ?2 U, {2 a' F/ a1 P
user = User.query.first()
- p$ A& W" x+ b) }1 C) q9 ~5 Jprint user
4 R5 A9 b6 ]' o; }% c* p1 w) {: O9 S
5、删除数据8 `, z" ?% X; W0 v# Q( u
user  = User.query.first()
8 q3 K& V0 [( G# K6 O0 tdb.session.delete(user)& M' z1 j% V/ F! D; i: N# O) A
db.session.commit()
, j' P# Y( o" K4 z# L, dUser.query.all()
3 L) y; e7 O7 G. X" U[<User u'stt'>]- F! t/ ]7 {5 h- R' [. e& F7 E1 F% A
3 v+ ]6 t" p/ {2 [. ~, R- G
6、更新数据
" A; X  x0 Y+ o5 R; E3 Ruser = User.query.first()( I& N4 f( x( i) T8 m$ y: v
user.username = 'ballking'" J' `& H8 t( c7 `+ _
User.query.first()  z: c/ \0 z6 d6 T( s# Z0 m
<User u'ballking'>: ~, n% ^" K" d+ B6 m# z' {
, D" X5 D! o5 e" ^/ Q1 K
+ d" @0 \* D+ K0 a9 t
: |% F4 ^' C4 `# u$ |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:37 , Processed in 0.019995 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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