1. Preparations
python3.6 connections necessary to introduce pymssql sqlserver database module
pymssql official: https://pypi.org/project/pymssql/
There is no need to install it:
pip install:
2. Connect database
First you have to define the target database: 'server name', "account name", "password", "database name"
Because these parameters are necessary
Here use the local database for testing:
Here is the link statement:
operation result:
3. CRUD (CRUD)
Create a new database table:
注意当执行更改数据库表的操作时,执行完sql后别忘记加一句commit().
close()是必须的,否则python程序会一至占用这个数据库.
增加(Create):
运行结果:
查询(Retrieve):
运行结果:
Update (Update) and delete (Delete) operations are similar. Rewritten sql statement on the line.
With use of a cursor and stored procedures
Pymssql database connections manner and using substantially the same sqlite:
- Use
connect
create a connection object connect.cursor
Create a cursor object, execute SQL statements basically carried out on the cursorcursor.executeXXX
Method executes SQL statements,cursor.fetchXXX
get the query results, etc.- Call the
close
method Closes the cursorcursor
and database connections
import pymssql
# server 数据库服务器名称或IP # user 用户名 # password 密码 # database 数据库名称 conn = pymssql.connect(server, user, password, database) cursor = conn.cursor() # 新建、插入操作 cursor.execute(""" IF OBJECT_ID('persons', 'U') IS NOT NULL DROP TABLE persons CREATE TABLE persons ( id INT NOT NULL, name VARCHAR(100), salesrep VARCHAR(100), PRIMARY KEY(id) ) """) cursor.executemany( "INSERT INTO persons VALUES (%d, %s, %s)", [(1, 'John Smith', 'John Doe'), (2, 'Jane Doe', 'Joe Dog'), (3, 'Mike T.', 'Sarah H.')]) # 如果没有指定autocommit属性为True的话就需要调用commit()方法 conn.commit() # 查询操作 cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') row = cursor.fetchone() while row: print("ID=%d, Name=%s" % (row[0], row[1])) row = cursor.fetchone() # 也可以使用for循环来迭代查询结果 # for row in cursor: # print("ID=%d, Name=%s" % (row[0], row[1])) # 关闭连接 conn.close()
Note: Examples of parameters used in a query operation
%s
instead'%s'
, if the parameter value is a string, it will automatically single quotes when executing the statement
Note the use of the cursor
A connection only one cursor query is active, as follows:
c1 = conn.cursor()
c1.execute('SELECT * FROM persons') c2 = conn.cursor() c2.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') print( "all persons" ) print( c1.fetchall() ) # 显示出的是c2游标查询出来的结果 print( "John Doe" ) print( c2.fetchall() ) # 不会有任何结果
To avoid this problem you can use the following two ways:
- Create multiple connections to ensure that multiple queries can be executed in parallel on different connection cursor
- Use
fetchall
lower again after the execution method to get the cursor to the results of a query, as follows:
c1.execute('SELECT ...') c1_list = c1.fetchall() c2.execute('SELECT ...') c2_list = c2.fetchall()
Cursor behavior dictionary variable return
Each row of the query results obtained above example, the cursor tuple type,
can specify when you create a cursor as_dict
to the cursor variable parameter returns the dictionary,
the dictionary key is the data table column names
conn = pymssql.connect(server, user, password, database)
cursor = conn.cursor(as_dict=True)
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') for row in cursor: print("ID=%d, Name=%s" % (row['id'], row['name'])) conn.close()
Use with
statement (context manager)
By using with
statement to display the call omitted close
close the connection method and cursors
with pymssql.connect(server, user, password, database) as conn: with conn.cursor(as_dict=True) as cursor: cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') for row in cursor: print("ID=%d, Name=%s" % (row['id'], row['name']))
Call a stored procedure
above 2.0.0 version pymssql can cursor.callproc
to call a stored procedure method
with pymssql.connect(server, user, password, database) as conn: with conn.cursor(as_dict=True) as cursor: # 创建存储过程 cursor.execute(""" CREATE PROCEDURE FindPerson @name VARCHAR(100) AS BEGIN SELECT * FROM persons WHERE name = @name END """) # 调用存储过程 cursor.callproc('FindPerson', ('Jane Doe',)) for row in cursor: print("ID=%d, Name=%s" % (row['id'], row['name']))