找回密码
 注册
查看: 43|回复: 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):% x+ ^. ?" O( P. h2 S, n
  File "<input>", line 1, in <module>4 q! _) p# h. C+ Z( b
ImportError: cannot import name 'db' from 'app' (C:\Users\xxxx\pythonProject\venv\lib\site-packages\app\__init__.py)
- G$ K- m- {1 w' ?5 U' D& X
5 O8 D, n" Y; g* R
" x  d. {0 L) r, f! u遇到问题,我一直没有想过问题在哪里,为什么引入不了这个db5 Q: K2 S; j  d: }9 H/ L/ @* _
在python console上执行时一直报错,但视频里却能正常,为什么?  }/ n3 S' L' h- {( W
>>>from app import db/ _" a; X5 J# E  B
Traceback (most recent call last):6 L- Q: }# |( g8 s
  File "<input>", line 1, in <module>1 y) a. I4 O4 O" D) |2 E% w; x
ImportError: cannot import name 'db' from 'app' (C:\Users\xxxxx\pythonProject\venv\lib\site-packages\app\__init__.py)
2 S) }. Q6 N0 u0 W
# \- a& ^9 A6 y: A1 V* _解决问题原因:
; R- s; |- d' o3 D一次偶然的问题,一直测试,发现一个问题。我们的xxxx.py 这个flask文件的问题。
0 C* Q, _& v  h6 I9 e$ F# y" t我们取名叫什么,就用前面的名称  比如app.py就用app  完整的输入就是from app import db
! `% @* u. A' c! z3 _
1 r( g, q! z3 a4 n4 F, s& N但我这里的文件名称是appflask.py  那么我们这边就要在执行的时候,输入from appflask import db
8 f  L$ ~! W% o3 s1 u
% r* }. M* F6 r2 Y>>>from appflask import db
, u" X2 g8 i4 b3 ^# ~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.7 i% i% Z# P8 \8 J: q
  warnings.warn(FSADeprecationWarning(
! E) l0 {4 t* [7 |+ l
0 M3 i1 B, \# u2 v- V  @即可执行后面的db.create_all()等命令了。# Z7 H& W: d. ~+ {3 `5 ?

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-7-30 08:13:28 | 显示全部楼层
上面的测试结果。来自一个调试的步骤。
$ Y8 b2 ]! u. o$ }2 K- b  先将上边儿的代码保存到桌面,并命名为hello.py,然后,我们就在数据python shell中来完成相应的操作吧。7 S! j8 K$ O$ V+ w6 ^) w7 }. V6 s
1! C9 w4 w6 X. l5 k
首先打开cmd执行命令:
7 K& w8 R3 j3 O% x0 M
+ U- t' |, ~7 j  e# ipython C:\Users\st\Desktop\hello.py shell
- R" w7 V6 m! {, \- ~
* c8 u1 n9 H1 j1 F8 S打开如下的python shell环境:
# \& N9 ~; L- H  C* ihello.py shell1 h. y5 O* m0 f2 O6 _* F0 f

- W7 }+ ^' ?+ o! W% c% k! ^1 x5 r接下来,我们就来看看如何操作MySQL数据库:3 P$ J+ x! Y4 P$ i
在操作之前先将flask-sqlalchemy的类实例导入:(在上边儿的代码中,我们已经将sqlalchemy的类实例为db,所以我们执行以下操作将其导入:' i* e8 `7 X- X, {
from hello import db* M7 A3 \( ]9 X
! \; I# O% ]% B9 t

; b5 R1 e4 O- B( v* ~# [# ~3 |$ i1、创建表8 k) E3 {* s+ i! x3 e' i" U$ t
db.create_all()
- M* C4 V- `3 S0 V5 C( j2、删除表5 ~) y% n5 s" K1 h1 w. |
db.drop_all()3 @4 J/ c! q! f) m' a

) x  s% E3 f( z7 b' W& G0 i3 D
# _# c0 L* h9 Z3 X5 m$ X. {2 J3、插入数据
0 y1 ]9 z9 B( m" F" y7 _from hello import User
+ N2 }: u  M, w. R" @! ]: xu = User(username='st',email='st@example.com', passowrd='xxxx')
9 p, J/ r# u8 |1 \4 |2 tdb.session.add(u)
% x- N/ h  E' X, D; b$ i0 N. V* Ldb.session.commit()0 j* K& Q" u- ~' w8 D  I1 p0 j2 |

* g* n% w6 X  Y0 P8 q# u# d4 j4、查询数据
6 H: d. L# Y. R(1)filter_by查询(精确查询):3 p0 D7 X. v4 |: e
’user= User.query.filter_by(username='st').first()
" |4 T& [2 }8 `3 b* \  X
% o9 q. v. m0 b* L7 O& ^+ Y0 M& n. {8 e- u9 S2 c
print user
6 `7 i1 c4 Y" \5 Y<User u'st'>" a1 X) [$ `, d  t1 _
(2)get(主键):(id一般为主键)
% d7 b$ z0 f& pUser.query.get(1)
8 M- l" r; ]* M) h+ r: n<User u'st'>
2 _% z0 x! K3 C% X5 `0 t' U(3)filter查询(模糊查询):
! M5 R* R# O) x" I: h5 @User.query.filer(User.username.endswith('t')).all()
" m6 ?, L; f2 J% t+ Q% B4 d[<User u'st'>]
  w: {+ |: ]* ?& E5 |; U* A" t1 k
(4)逻辑非查询:
# l; ?+ Q: D: P9 x# X" iuser = User.query.filter(User.username != 'st').first()) |/ {9 F- d& J2 a4 `9 t
print user
; R6 G3 L2 n: S: M<User u'stt'># s( q( _4 E& ^8 k, }$ d: p8 _- s
% Z# p9 x+ v: I
from sqlalchemy import not_7 q/ a/ i3 e2 _: d/ h; u
user = User.query.filter(not_(User.username == 'st')).first()
+ w. ~0 D' P9 s' z  Vprint user4 T* h! h! v: B5 k+ e& F/ ?1 B
: z+ |3 f  V7 a: @8 s; l( L9 T
<User u'stt'>
5 D- T) Q8 g0 X+ D' a0 M" ^* c% A8 Z( z0 _, \* b9 Y
(5)逻辑与. o% c; }0 Z% F7 L' q
from sqlalchemy import and_
; k* o( Z# K2 z) [7 huser = User.query.filter(and_(User.username =='stt', User.email.endswith('@example.com'))).first()# m' O0 K* b6 R

! u- c) c5 u, v) ^; G9 }print user0 Y' z1 t7 L2 H+ `5 M
( Z& x% d) y1 S! s6 d, ]
<User u'stt'>/ \  k4 J7 B1 `4 C$ N' r
(6)逻辑或
- q7 Z; S$ x6 b1 d0 _4 M$ k$ L2 pfrom sqlalchemy import or_9 P7 Y6 I9 p7 j% u
user = User.query.filter(or_(User.username !='stt', User.email.endswith('@example.com'))).first()
$ S# Z8 r- o+ {2 I% m; P" x/ Y1 x+ ?" d( e* B" u
; j: w- U$ M( d! u
print user
- i7 d5 Y( S/ Q
% Q/ z7 E9 i$ @5 j, Q' h6 j# d<User u'stt'># R( M6 Q- _, t4 s
(7)first()返回查询到的第一个对象9 `: K3 o7 I: A7 g; n
user = User.query.first()4 G9 U" Q: U2 [5 e) m5 x# {' ]
print user7 p+ J% e" z! M8 s8 f& U
9 l2 N- l4 H6 K+ U
<User u'st'>
/ ]& q. ~, M! O9 l' U6 G$ g3 H) q  A& d3 O
(8)all()返回查询到的所有对象
9 [* q& V# p1 }  r# g  u' W7 b5 Cuser = User.query.first()
7 ~3 M! u* H  w' H5 A6 Xprint user9 K" j! R( F" p6 B3 T# P
" p/ @. ^, i( H
5、删除数据
3 X' h! p# @, ~& zuser  = User.query.first()& @7 j% j5 E7 X  T" M! u. U- `  P% d
db.session.delete(user)* ?8 P, E3 z& Z. O, `$ ~3 n  y6 E
db.session.commit()8 C) n2 I! e0 ~; x" R# R8 \' i
User.query.all()5 E: Q" M( r9 A* p/ @
[<User u'stt'>]
4 k9 D0 w/ B( @, }2 G5 L0 l% e$ X
) d1 T8 l0 Z( {( a3 Y  L6、更新数据
: u2 X) D/ S0 T" E8 B7 x+ |user = User.query.first()
0 r  l  x6 z, N" y7 O8 C- S* q; Vuser.username = 'ballking'
4 x8 C& G+ B0 z, MUser.query.first()
- x$ ~* g( ^6 x. B$ O: n<User u'ballking'>
+ e- \# z# E8 S& [9 _- z- ^7 x9 J' y: D' ~8 t- K
# k9 ~: Q9 d$ T1 _, _
% a. o0 E) `4 H9 {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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