記事のディレクトリ
ORMの方法
ORMのフルネームは、オブジェクトリレーショナルマッピング、つまりオブジェクトリレーショナルマッピングです。その実現のアイデアは、リレーショナルデータベース内のテーブルのデータをオブジェクトにマップし、それらをオブジェクトの形式で表示して、開発者がデータベースの操作をこれらのオブジェクトの操作に変換できるようにすることです。したがって、その目的は、開発者がオブジェクト指向の考え方でデータベースの操作を実装できるようにすることです。
利点:複雑なSQLステートメントを使用する必要がなく、理解しやすく、多数のSQLステートメントを維持する必要がありません。システムはそれらを自動的にSQLステートメントに変換します。
不利益:ORMメソッド、低効率、データを効率的に操作する必要がある場合でも、SQLステートメントを使用する必要があります
1つは、Python操作MySqlです。
1.1データの読み取り
コード例:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,create_engine
from sqlalchemy.orm import sessionmaker
#生成基类 所有表构建的类都是基类之上的 继承这个基类
Base = declarative_base()
class Student(Base):
__tablename__ ='student'#表名
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer,default=0)#默认0
score = Column(Integer,default=60)#默认60
#创建引擎 相当于连接
engine = create_engine('mysql+pymysql://test:123456@localhost:3306/testdb')
DBSession = sessionmaker(engine)
session = DBSession()#必须实例化对象
#使用ORM方式对student表做一个查询
students = session.query(Student).limit(10)
for s in students:
print(s.id,s.name,s.age,s.score)
session.close()#必须要关闭
結果表示:
1.2データの挿入
コードは次のとおりです(例):
#填入数据
#随机生成 两个字的姓名 年龄 分数
for _ in range(10):
s = Student(name=''.join(random.sample('张王天男别奥法妹大',2)),
age=random.randint(16,22),score=random.randint(55,89))
#add只是把对象加到session里面,最中执行是下面的commit()
session.add(s)
#把添加的数据 整个让数据库执行,最终添加
session.commit()
結果表示:
1.3条件付きクエリ
1.3.1すべてクエリ
コードは次のとおりです(例):
#条件查询
#查找所有(all())名字是男奥的同学并打印出来
students = session.query(Student).filter(Student.name =='男奥').all()
for s in students:
#print(s) 只是输出对象
print(s.id,s.name,s.age,s.score)
結果表示:
1.3.2個人に問い合わせる
コードは次のとおりです(例):
'''
students = session.query(Student).filter(Student.name =='王天').limit(1)
'''
students = session.query(Student).filter(Student.name =='王天').limit(2)
結果表示:
1.3.3 limit()、all()、one()の使用条件
名前がのみone()を使用できる場合、つまり一般的に主キーone()を使用する【主キーを繰り返すことはできません】
個々の必要な
データを検索する場合はlimit()を使用し、すべてのデータでデータを検索する場合はall()を使用します
limit()とone()の違いを理解して習得する:
limit(1)の場合でも、forループを使用してデータを繰り返し出力する必要があります[limit()関数はリストを返します]
one()関数はオブジェクトを返します[one()が唯一です】
1.4データの変更
コード例:
#修改数据
student = session.query(Student).filter(Student.name =='Tom').one()
print(student.age)
student += 2
session.add(student)
session.commit()
student = session.query(Student).filter(Student.name =='Tom').one()
print(student.age)
修正する前に:
変更後:
プリントアウト:
総括する
问题1:NameError:name'random 'is not defined
解決策:インポートをランダムに追加
質問2:データベースの中国語名を挿入できませんでした(写真)
私はVSCodeエディターを使用しています(この問題は、VSを使用した後、データベースと組み合わせて解決されるまで、常に存在していました)
解決策:約2時間投げた後、(オンラインチュートリアルは私の状況では役に立たない)最終的に究極の方法を採用しました----->新しくインストールした
データベースをアンインストールします。オンラインチュートリアルに従って自分でアンインストールすることをお勧めします。 。
アンインストールがクリーンでない場合、セカンダリインストールが失敗します。MySqlアンインストールチュートリアルの
結果は次のとおりです。
中国語の名前は、アンインストール後の新規インストールからの挿入の成功を
補足するものです。MySqlが中国語の挿入に失敗するのはなぜですか?
SHOW VARIABLES LIKE'character% '; //このコマンドを使用する
下の図の場合:成功は下の図のようになります。
失敗(アンインストール前):下の図のようになります。
実際、latin1着替えるutf8はい(完全な変更です)が、オンラインチュートリアルは役に立たない多くの方法を試み、最終的にアンインストールして再インストールする必要がありました