SQLAlchemy使用教程

SQLAlchemy是python的ORM框架,把表映射成对象,类似于java的hibernate,mybatis。

而且支持的数据库非常多:

Firebird
Microsoft SQL Server
MySQL
Oracle
PostgreSQL
SQLite
Sybase

还支持其他数据库扩展。

下面来正式使用,首先基于之前文章在intellij idea+python plugin方式开发

先来安装依赖,项目右键->open mudule settings->SDKs->packages

点右边的+号

输入mysqlclient,点击install

然后再按照这方式安装sqlalchemy

最后显示如下:



我这里遇到一个问题,mysqlclient安装不上

因为在windows系统上很多功能都要依赖visio,去下载一个visio studio community版本能解决这个问题。

我的选择是用ubuntu,省事

 
 
 
 
新建TestSqlAlchemy.py:
 

import sqlalchemy
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey, select

print(sqlalchemy.__version__)

# connect db
engine = create_engine('mysql://root:[email protected]/tools', echo=True)
print(engine)

# create tables
metadata = MetaData()
users = Table('users', metadata,
              Column('id', Integer, primary_key=True),
              Column('name', String(50)),
              Column('fullname', String(50)),
              )

addresses = Table('addresses', metadata,
                  Column('id', Integer, primary_key=True),
                  Column('user_id', None, ForeignKey('users.id')),
                  Column('email_address', String(50), nullable=False)
                  )
metadata.create_all(engine)

# insert data
conn = engine.connect()
ins = users.insert().values(name='jack', fullname='Jack Jones')
result = conn.execute(ins)
print(result.inserted_primary_key)

# insert muilt data
conn.execute(users.insert(), [
    {'id': 20, 'name': 'jack', 'fullname': 'jack Jones'},
    {'id': 21, 'name': 'rose', 'fullname': 'rose Jones'}
])
conn.execute(addresses.insert(), [
    {'user_id': 20, 'email_address': '[email protected]'},
    {'user_id': 21, 'email_address': '[email protected]'}
])

# find data
s = select([users])
result=conn.execute(s)
for row in result:
    print(row)
result.close()

# find join data
s = select([users, addresses]).where(users.c.id == addresses.c.user_id)
result=conn.execute(s)
for row in result:
    print(row)
result.close()
运行结果:

/usr/bin/python3.6 /home/justeene/IdeaProjects/TestPython/TestSqlAlchemy.py
1.2.7
Engine(mysql://root:***@192.168.1.20/tools)
2018-05-06 17:08:00,523 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2018-05-06 17:08:00,524 INFO sqlalchemy.engine.base.Engine ()
2018-05-06 17:08:00,533 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2018-05-06 17:08:00,533 INFO sqlalchemy.engine.base.Engine ()
2018-05-06 17:08:00,539 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8' and `Collation` = 'utf8_bin'
2018-05-06 17:08:00,539 INFO sqlalchemy.engine.base.Engine ()
2018-05-06 17:08:00,547 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2018-05-06 17:08:00,547 INFO sqlalchemy.engine.base.Engine ()
2018-05-06 17:08:00,551 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2018-05-06 17:08:00,551 INFO sqlalchemy.engine.base.Engine ()
2018-05-06 17:08:00,554 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin AS anon_1
2018-05-06 17:08:00,554 INFO sqlalchemy.engine.base.Engine ()
2018-05-06 17:08:00,560 INFO sqlalchemy.engine.base.Engine DESCRIBE `users`
2018-05-06 17:08:00,560 INFO sqlalchemy.engine.base.Engine ()
2018-05-06 17:08:00,567 INFO sqlalchemy.engine.base.Engine DESCRIBE `addresses`
2018-05-06 17:08:00,567 INFO sqlalchemy.engine.base.Engine ()
2018-05-06 17:08:00,579 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname) VALUES (%s, %s)
2018-05-06 17:08:00,579 INFO sqlalchemy.engine.base.Engine ('jack', 'Jack Jones')
2018-05-06 17:08:00,589 INFO sqlalchemy.engine.base.Engine COMMIT
[2]
2018-05-06 17:08:00,608 INFO sqlalchemy.engine.base.Engine INSERT INTO users (id, name, fullname) VALUES (%s, %s, %s)
2018-05-06 17:08:00,608 INFO sqlalchemy.engine.base.Engine ((20, 'jack', 'jack Jones'), (21, 'rose', 'rose Jones'))
2018-05-06 17:08:00,611 INFO sqlalchemy.engine.base.Engine COMMIT
2018-05-06 17:08:00,643 INFO sqlalchemy.engine.base.Engine INSERT INTO addresses (user_id, email_address) VALUES (%s, %s)
2018-05-06 17:08:00,643 INFO sqlalchemy.engine.base.Engine ((20, '[email protected]'), (21, '[email protected]'))
2018-05-06 17:08:00,647 INFO sqlalchemy.engine.base.Engine COMMIT
2018-05-06 17:08:00,665 INFO sqlalchemy.engine.base.Engine SELECT users.id, users.name, users.fullname
FROM users
2018-05-06 17:08:00,665 INFO sqlalchemy.engine.base.Engine ()
(1, 'jack', 'Jack Jones')
(2, 'jack', 'Jack Jones')
(20, 'jack', 'jack Jones')
(21, 'rose', 'rose Jones')
2018-05-06 17:08:00,670 INFO sqlalchemy.engine.base.Engine SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users, addresses
WHERE users.id = addresses.user_id
2018-05-06 17:08:00,670 INFO sqlalchemy.engine.base.Engine ()
(20, 'jack', 'jack Jones', 1, 20, '[email protected]')
(21, 'rose', 'rose Jones', 2, 21, '[email protected]')

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/u011870280/article/details/80211819